PHP PDO Prepared Statement – MySQL LIKE-Abfrage
In PHP kann die Verwendung vorbereiteter Anweisungen mit PDO für MySQL LIKE-Abfragen eine Herausforderung sein. Dieser Artikel befasst sich mit einem häufigen Problem, das beim Versuch auftritt, eine LIKE-Abfrage mit vorbereiteten Anweisungen auszuführen.
Betrachten Sie die folgende Abfrage:
SELECT hs.hs_pk, hs.hs_text, hs.hs_did, hd.hd_did, hd.hd_text, hv.hv_text, hc.hc_text FROM hs LEFT JOIN hd ON hs.hs_did = hd.hd_did LEFT JOIN hd ON hd.hd_vid = hv.hv_id LEFT JOIN hc ON hd.hd_pclass = hc.hc_id WHERE hs.hs_text LIKE "%searchTerm%" LIMIT 25;
Diese Abfrage sucht bei der Ausführung erfolgreich nach Zeichenfolgen, die den Suchbegriff enthalten direkt im MySQL-Client. Bei der Übersetzung dieser Abfrage in PDO mit vorbereiteten Anweisungen werden jedoch keine Ergebnisse zurückgegeben.
Der bereitgestellte PHP-Code veranschaulicht fehlgeschlagene Versuche, die LIKE-Abfrage mit verschiedenen Syntaxen auszuführen. Das Problem liegt in der Syntax, die zur Angabe des Suchbegriffs in der vorbereiteten Anweisung verwendet wird.
Zu den falschen Versuchen gehören:
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));
Der richtige Ansatz ist die Verwendung der folgenden Syntax:
$prep = $dbh->prepare($sql); $ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));
Erklärung:
Vorbereitete Aussagen nicht Führen Sie einfache String-Ersetzungen durch. Die Daten werden getrennt von der Abfrage übertragen, sodass beim Einbetten von Werten keine Anführungszeichen erforderlich sind. Anführungszeichen sind nur erforderlich, wenn der tatsächlich angegebene Wert in die Abfrage eingefügt werden muss.
Das obige ist der detaillierte Inhalt vonWie verwende ich PDO-vorbereitete Anweisungen korrekt mit MySQL-LIKE-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!