Heim > Backend-Entwicklung > PHP-Tutorial > Warum gibt PDO unerwartete Ergebnisse zurück, wenn eine IN-Klausel mit einem Array von Platzhaltern verwendet wird?

Warum gibt PDO unerwartete Ergebnisse zurück, wenn eine IN-Klausel mit einem Array von Platzhaltern verwendet wird?

Barbara Streisand
Freigeben: 2024-12-21 08:31:13
Original
983 Leute haben es durchsucht

Why Does PDO Return Unexpected Results When Using an IN Clause with an Array of Placeholders?

PDO mit IN-Klausel-Array verwenden [Duplikat]

Frage:

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));
Nach dem Login kopieren

Antwort:

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);
Nach dem Login kopieren

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));
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage