Heim >Backend-Entwicklung >PHP-Tutorial >Wie verwende ich PDO mit einer IN-Klausel und einem Array in PHP richtig?

Wie verwende ich PDO mit einer IN-Klausel und einem Array in PHP richtig?

Susan Sarandon
Susan SarandonOriginal
2024-12-19 10:06:14761Durchsuche

How to Correctly Use PDO with an IN Clause and an Array in PHP?

PHP – Verwendung von PDO mit IN-Klausel-Array

PDO ermöglicht Ihnen die Ausführung von SQL-Anweisungen, die eine IN-Klausel mit einem Array von Werten enthalten. Dieser Ansatz funktioniert zwar gut mit der Zeichenfolgenverkettung (implode()), kann jedoch bei der Verwendung von Platzhaltern zu Problemen führen.

Identifizieren des Problems

Der folgende Code, der verwendet Platzhalter, gibt nicht alle erwarteten Elemente zurück:

$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));
$my_results = $my_result->fetchAll();

Dieser Code gibt nur das Element zurück, dessen my_value dem ersten Element im entspricht $in_array (1), nicht die anderen (2 und 3).

Lösung für Positionsplatzhalter

PDO erfordert die dynamische Erstellung einer Zeichenfolge mit Platzhaltern und deren Einfügen in die Abfrage beim Binden von Array-Werten wie gewohnt. Für Positionsplatzhalter funktioniert diese Lösung:

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

Lösung für benannte Platzhalter

Der Ansatz für benannte Platzhalter beinhaltet die Erstellung einer Folge von Platzhaltern (z. B. :id0, :id1, :id2) und Sammeln der Werte in einem Schlüsselwert-Array. Hier ist ein Beispiel:

$ids = [1,2,3];
$in = "";
$i = 0;
foreach ($ids as $item)
{
    $key = ":id" . $i++;
    $in .= ($in ? "," : "") . $key; // :id0,:id1,:id2
    $in_params[$key] = $item; // collecting values into a key-value array
}

$sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar";
$stm = $db->prepare($sql);
$stm->execute(array_merge(["foo" => "foo", "bar" => "bar"], $in_params)); // merge two arrays
$data = $stm->fetchAll();

Wenn Sie diese Lösungen befolgen, können Sie PDO erfolgreich mit einer IN-Klausel verwenden, die ein Array von Werten enthält.

Das obige ist der detaillierte Inhalt vonWie verwende ich PDO mit einer IN-Klausel und einem Array in PHP richtig?. 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