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
Freigeben: 2024-12-19 19:45:19
Original
351 Leute haben es durchsucht

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

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

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

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

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

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!

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