Heim  >  Artikel  >  Backend-Entwicklung  >  Warum gibt die vorbereitete PDO-Anweisung bei der LIKE-Abfrage keine Ergebnisse zurück?

Warum gibt die vorbereitete PDO-Anweisung bei der LIKE-Abfrage keine Ergebnisse zurück?

DDD
DDDOriginal
2024-11-01 12:50:29454Durchsuche

Why Does PDO Prepared Statement Fail to Return Results with LIKE Query?

PDO Prepared Statement in PHP: Probleme mit MySQL LIKE-Abfragen

PHPs PDO-Klasse mit MySQL bietet einen Mechanismus zum Ausführen von SQL-Anweisungen mit parametrisierten Abfragen , Verbesserung der Sicherheit und Leistung. Allerdings können Benutzer bei der Verwendung von LIKE-Abfragen auf Schwierigkeiten stoßen.

Problem: PDO Prepared Statement gibt bei LIKE-Abfrage keine Ergebnisse zurück

Beim Versuch, eine Abfrage ähnlich der folgenden auszuführen unter Verwendung von PDO:

<code class="mysql">SELECT *
FROM hs
WHERE hs_text LIKE "%searchTerm%"</code>

Benutzer stellen möglicherweise fest, dass keine Ergebnisse zurückgegeben werden.

Lösung: Korrekte Parametrisierung

Das Problem liegt in der falschen Parametrisierung des Suchbegriffs. In PHP verwenden vorbereitete Anweisungen benannte Platzhalter, die eine andere Syntax erfordern. Die korrekte Parametrisierung für die LIKE-Abfrage lautet:

<code class="php">$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));</code>

Erklärung:

Vorbereitete Anweisungen trennen die Daten von der Abfrage und verwenden Platzhalter. Daher ist es nicht erforderlich, den Suchbegriff in doppelte Anführungszeichen zu setzen oder eine Zeichenfolgenverkettung durchzuführen.

Andere häufige Fehler:

<code class="php">WHERE hs_text LIKE :searchTerm
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));  // Incorrect</code>
  • Dieser Ansatz ist falsch, da unnötige doppelte Anführungszeichen hinzugefügt werden.
<code class="php">WHERE hs_text LIKE CONCAT(\'%\', ?, \'%\')
$ret = $prep->execute(array($searchTerm));  // Incorrect</code>
  • Die Verwendung von CONCAT zum Einschließen des Suchbegriffs in die Abfrage ist für die Parametrisierung nicht erforderlich.

Durch die Verwendung von Mit der richtigen Parametrisierung können Sie LIKE-Abfragen mithilfe von PDO-vorbereiteten Anweisungen in PHP erfolgreich ausführen.

Das obige ist der detaillierte Inhalt vonWarum gibt die vorbereitete PDO-Anweisung bei der LIKE-Abfrage keine Ergebnisse zurück?. 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