PHP PDO Prepared Statement – MySQL LIKE-Abfrage
Problem:
Beim Ausführen einer MySQL LIKE-Abfrage mit PHPs PDO, die Suche liefert keine Ergebnisse.
Abfrage:
<code class="sql">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;</code>
PHP-Code:
<code class="php">$sql = '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'; $prep = $dbh->prepare($sql); $ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));</code>
Lösung:
Der Fehler liegt im Wert, der dem Parameter :searchTerm in der Methodeexecute() zugewiesen wurde. Bei der Verwendung vorbereiteter Anweisungen sind keine doppelten Anführungszeichen erforderlich.
Korrigierter PHP-Code:
<code class="php">$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));</code>
Erklärung:
Vorbereitete Anweisungen verarbeiten Daten getrennt von der Abfrage. Sie führen keine String-Ersetzungen durch. Anführungszeichen werden nur hinzugefügt, wenn Werte direkt in die Abfrage eingebettet werden.
Das obige ist der detaillierte Inhalt vonWarum gibt meine mit PHP PDO vorbereitete Anweisung mit MySQL LIKE-Abfrage keine Ergebnisse zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!