Maison >développement back-end >tutoriel php >Comment puis-je lier un tableau à une clause IN() dans une requête PDO ?

Comment puis-je lier un tableau à une clause IN() dans une requête PDO ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-19 20:33:11118parcourir

How Can I Bind an Array to an IN() Clause in a PDO Query?

Les valeurs d'un tableau peuvent-elles être liées à une condition IN() dans une requête PDO ?

Liaison d'un tableau de valeurs à un IN() La condition utilisant PDO est possible, mais elle nécessite la construction manuelle d'un espace réservé. Voici comment :

  1. Créer des espaces réservés : Construisez une chaîne d'espaces réservés correspondant au nombre d'éléments du tableau. Par exemple, si le tableau contient trois valeurs, la chaîne d'espace réservé serait "?,?".
  2. Prepare Statement : Préparez une instruction PDO en utilisant la condition IN() avec les espaces réservés construits .
  3. Execute Statement : Exécutez l'instruction préparée et transmettez les valeurs du tableau comme arguments. PDO liera et citera automatiquement les valeurs.

Voici un exemple :

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

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

En cas d'espaces réservés nommés :

  1. Créer Séquence d'espaces réservés : Créez une séquence d'espaces réservés nommés correspondant aux éléments du tableau, par ex. :id0,:id1,:id2.
  2. Collecter les valeurs : Collectez les valeurs du tableau dans un tableau clé-valeur en utilisant la séquence d'espace réservé comme clés.
  3. Préparer et exécuter : Préparez l'instruction et exécutez-la, en fusionnant le paramètre tableaux.

Voici un exemple :

$ids = [1, 2, 3];
$in = "";
$i = 0; // external counter
foreach ($ids as $item) {
    $key = ":id" . $i++;
    $in .= ($in ? "," : "") . $key; // :id0,:id1,:id2
    $in_params[$key] = $item; // collect values
}

$sql = "SELECT * FROM table WHERE id IN ($in)";
$stmt = $db->prepare($sql);
$stmt->execute(array_merge(["foo" => "foo", "bar" => "bar"], $in_params));

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