Maison >développement back-end >tutoriel php >PDO peut-il gérer la liaison de tableau pour les requêtes de clause IN() ?

PDO peut-il gérer la liaison de tableau pour les requêtes de clause IN() ?

DDD
DDDoriginal
2024-12-25 07:52:14641parcourir

Can PDO Handle Array Binding for IN() Clause Queries?

La liaison d'un tableau à une condition IN() peut-elle être effectuée avec PDO ?

L'utilisation de tableaux dans les requêtes PDO pour les conditions IN() peut être obtenu en construisant manuellement les espaces réservés pour chaque membre du tableau. Voici un aperçu du processus :

$ids       = [1, 2, 3, 7, 8, 9];
$inQuery    = str_repeat('?,', count($ids) - 1) . '?'; // generates ?,?,?,?,?,?

$stmt = $db->prepare("SELECT * FROM table WHERE id IN($inQuery)");
$stmt->execute($ids);
$data = $stmt->fetchAll();

Construisez la variable $inQuery à l'aide de str_repeat pour créer une liste d'espaces réservés. Cela garantit que chaque membre du tableau dispose d'un espace réservé correspondant.

Une autre approche consiste à fusionner des tableaux contenant des espaces réservés et leurs valeurs associées. Cette méthode convient lorsque d'autres espaces réservés existent dans la requête.

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

Les espaces réservés nommés nécessitent une approche légèrement différente, dans laquelle vous créez une séquence d'espaces réservés correspondante, telle que :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 foo=:foo AND id IN ($in) AND bar=:bar";
$stmt = $db->prepare($sql);
$stmt->execute(array_merge($params, $in_params));
$data = $stmt->fetchAll();

Ces méthodes fournissent un moyen sécurisé et efficace d'utiliser des tableaux dans des conditions IN() avec PDO.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn