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
Barbara StreisandOriginal
2024-12-21 08:31:131056Durchsuche

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));

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);

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!

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