Heim >Datenbank >MySQL-Tutorial >Warum gibt PDO beim Binden von Parametern an eine WHERE IN-Klausel nur eine Zeile zurück?
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!