Bei Verwendung von PDO zum Ausführen einer Anweisung mit einer IN-Klausel, die ein Array verwendet Warum gibt dieser Code für seine Werte ein Unerwartetes zurück? Ergebnis:
$in_array = array(1, 2, 3); $in_values = implode(',', $in_array); $my_result = $wbdb->prepare("SELECT * FROM my_table WHERE my_value IN (:in_values)"); $my_result->execute(array(':in_values' => $in_values));
PDO hat Schwierigkeiten bei der Verarbeitung von IN-Klauseln, die Platzhalter für ein Array von Werten verwenden. Um dieses Problem zu beheben, müssen Sie dynamisch eine Zeichenfolge von Platzhaltern erstellen und diese in die Abfrage einfügen, während Sie die Array-Werte separat binden.
Für Positionsplatzhalter:
$in = str_repeat('?,', count($in_array) - 1) . '?'; $sql = "SELECT * FROM my_table WHERE my_value IN ($in)"; $stm = $db->prepare($sql); $stm->execute($in_array);
Für benannte Platzhalter :
// collect parameters for query $params = ["foo" => "foo", "bar" => "bar"]; // prepare IN clause placeholders and values $ids = [1,2,3]; $in = ""; $i = 0; foreach ($ids as $item) { $key = ":id" . $i++; $in .= ($in ? "," : "") . $key; $in_params[$key] = $item; } // construct query and execute $sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar"; $stm = $db->prepare($sql); $stm->execute(array_merge($params, $in_params));
Das obige ist der detaillierte Inhalt vonWarum gibt PDO unerwartete Ergebnisse zurück, wenn eine IN-Klausel mit einem Array von Platzhaltern verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!