Heim >Datenbank >MySQL-Tutorial >Warum schlagen meine PDO-LIKE-Abfragen fehl und wie kann ich sie beheben?

Warum schlagen meine PDO-LIKE-Abfragen fehl und wie kann ich sie beheben?

Susan Sarandon
Susan SarandonOriginal
2024-12-28 12:39:23479Durchsuche

Why Do My PDO LIKE Queries Fail, and How Can I Fix Them?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn