Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich die IN-Klausel von PDO effektiv mit Arrays in PHP verwenden?

Wie kann ich die IN-Klausel von PDO effektiv mit Arrays in PHP verwenden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-19 19:45:19353Durchsuche

How Can I Effectively Use PDO's IN Clause with Arrays in PHP?

PHP – Verwendung von PDO mit IN-Klausel-Array

PDO zeichnet sich durch die Ausführung von Anweisungen mit IN-Klauseln aus, wenn Arrays für ihre Werte verwendet werden, wie im folgenden Code dargestellt:

$in_array = [1, 2, 3];
$in_values = implode(',', $in_array);
$my_result = $wbdb->prepare("SELECT * FROM my_table WHERE my_value IN (?)");
$my_result->execute([$in_values]);
$my_results = $my_result->fetchAll();

Der folgende Code zeigt jedoch unerwartetes Verhalten:

$in_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([':in_values' => $in_values]);
$my_results = $my_result->fetchAll();

Anstelle von Dieser Code gibt alle Elemente zurück, deren my_value mit Werten in $in_array übereinstimmt. Dieser Code gibt nur das Element zurück, dessen my_value mit dem ersten Element in $in_array übereinstimmt.

PDO ist nicht dafür gerüstet, solche Szenarien effektiv zu bewältigen. Um Arrays in IN-Klauseln zu verwenden, müssen wir dynamisch eine Zeichenfolge mit Platzhaltern generieren und diese in die Abfrage einfügen. Bei Positionsplatzhaltern lautet die Lösung wie folgt:

$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);
$data = $stm->fetchAll();

Für Fälle mit mehreren Platzhaltern sollten Sie die Nutzung von array_merge() in Betracht ziehen. Zum Beispiel:

$arr = [1, 2, 3];
$in = str_repeat('?,', count($arr) - 1) . '?';
$sql = "SELECT * FROM table WHERE foo=? AND column IN ($in) AND bar=? AND baz=?";
$stm = $db->prepare($sql);
$params = array_merge([$foo], $arr, [$bar, $baz]);
$stm->execute($params);
$data = $stm->fetchAll();

In Szenarien mit benannten Platzhaltern ist der Prozess komplizierter, da er die Generierung einer Folge von Platzhaltern beinhaltet, zum Beispiel :id0, :id1, :id2.

$ids = [1, 2, 3];
$in = "";
$i = 0;
foreach ($ids as $item) {
    $key = ":id" . $i++;
    $in .= ($in ? "," : "") . $key;
    $in_params[$key] = $item;
}

$sql = "SELECT * FROM table WHERE id IN ($in)";
$stm = $db->prepare($sql);
$stm->execute(array_merge($params, $in_params));
$data = $stm->fetchAll();

Glücklicherweise erfordern benannte Platzhalter keine strenge Reihenfolge, sodass Arrays in beliebigen Arrays zusammengeführt werden können Reihenfolge.

Das obige ist der detaillierte Inhalt vonWie kann ich die IN-Klausel von PDO effektiv mit Arrays in PHP verwenden?. 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