Heim >Datenbank >MySQL-Tutorial >Warum gibt PDO beim Binden von Parametern an eine WHERE IN-Klausel nur eine Zeile zurück?

Warum gibt PDO beim Binden von Parametern an eine WHERE IN-Klausel nur eine Zeile zurück?

DDD
DDDOriginal
2024-11-25 09:19:11854Durchsuche

Why Does PDO Return Only One Row When Binding Parameters to a WHERE IN Clause?

WHERE IN-Klauselparameter mit PDO binden

Frage:

Beim Versuch, Parameter mithilfe von an eine WHERE IN-Klausel zu binden PDO ist die resultierende Anzahl immer eins, anders als beim manuellen Einfügen von Werten ohne Parametrisierung. Was ist die Ursache für diese Diskrepanz?

Code:

$myArray = implode($myArray, ',');
$sth = $dbh->prepare('SELECT foo FROM bar WHERE ids IN (:ids)');
$sth->bindParam(':ids', $myArray);
$sth->execute();
$result = $sth->fetch();
echo $sth->rowCount();

Antwort:

Leider PHP-Datenobjekte (PDO) unterstützt Bindungsparameter für IN-Klauseln nicht direkt. Das $myArray-Array wird als einzelne Zeichenfolge behandelt, ähnlich wie in dieser SQL:

SELECT foo FROM bar WHERE ids IN ('1,2,3')

Obwohl mehrere durch Kommas getrennte Werte vorhanden sind, interpretiert die Datenbank sie als einen Zeichenfolgenwert.

Um das gewünschte Verhalten zu erreichen, müssen die IN-Klauseln wie folgt manuell in die Abfrage eingefügt werden:

'SELECT foo FROM bar WHERE ids IN (' . $myArray .')'

Leider gibt es keine Alternative Mechanismus für die Parameterbindung in den IN-Klauseln von PDO.

Das obige ist der detaillierte Inhalt vonWarum gibt PDO beim Binden von Parametern an eine WHERE IN-Klausel nur eine Zeile 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