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
Libérer: 2024-12-19 20:33:11
original
176 Les gens l'ont consulté

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);
Copier après la connexion

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));
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal