Heim >Datenbank >MySQL-Tutorial >Warum schlagen meine PDO-LIKE-Abfragen fehl und wie kann ich sie beheben?
Implementierung von LIKE-Abfragen in PDO
Die Implementierung von LIKE-Abfragen in PDO kann eine Herausforderung darstellen. Betrachten Sie die Beispielabfrage:
$query = "SELECT * FROM tbl WHERE address LIKE '%?%' OR address LIKE '%?%'"; $params = array($var1, $var2); $stmt = $handle->prepare($query); $stmt->execute($params);
Trotz der Gültigkeit der PDO-Verbindung und der Funktionsweise anderer Abfragen geben LIKE-Abfragen möglicherweise keine Ergebnisse zurück.
Syntax korrigieren
Um die Abfrage zu korrigieren, stellen Sie sicher, dass die %-Zeichen im $params-Array enthalten sind und nicht im Abfrage:
$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?"; $params = array("%$var1%", "%$var2%"); $stmt = $handle->prepare($query); $stmt->execute($params);
Das Problem verstehen
In der ursprünglichen Abfrage wurden die %-Zeichen in der Abfrage selbst platziert. Wenn die Abfrage jedoch vorbereitet wird, werden die Werte von $params innerhalb der bereits in Anführungszeichen gesetzten Zeichenfolge in Anführungszeichen gesetzt. Dies führt zu einer Abfrage wie:
SELECT * FROM tbl WHERE address LIKE '%"foo"%' OR address LIKE '%"bar"%'
Diese Abfrage gibt keine Ergebnisse zurück, da die Werte nicht ordnungsgemäß maskiert sind. Durch Platzieren der %-Zeichen im $params-Array werden sie Teil der mit Escapezeichen versehenen Werte und die Abfrage wird korrekt ausgeführt.
Das obige ist der detaillierte Inhalt vonWarum schlagen meine PDO-LIKE-Abfragen fehl und wie kann ich sie beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!