Maison >développement back-end >tutoriel php >Comment lier un tableau de chaînes à une clause MySQLi WHERE IN (?) ?

Comment lier un tableau de chaînes à une clause MySQLi WHERE IN (?) ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-25 22:05:13407parcourir

How to Bind an Array of Strings to a MySQLi WHERE IN (?) Clause?

Liaison d'un tableau de chaînes dans une clause WHERE IN (?) avec MySQLi

Lorsque vous travaillez avec des instructions préparées MySQLi, il est essentiel de comprendre comment lier un tableau de valeurs à une clause WHERE IN (?). Cet article fournit un guide complet pour résoudre efficacement ce problème.

Le défi

L'objectif est de lier dynamiquement un tableau de noms de villes à une clause WHERE IN dans un Déclaration préparée par MySQLi. Cependant, le code fourni ne parvient pas à s'exécuter initialement en raison d'une liaison incorrecte du tableau.

Liaison d'un tableau de chaînes

Il existe plusieurs approches pour lier un tableau de chaînes. Explorons les méthodes disponibles :

1. Fonction exécuter_query() (PHP 8.2)

La solution la plus simple est disponible en PHP 8.2 avec l'introduction de la fonction exécuter_query(). Cette méthode permet de transmettre à la fois l'instruction SQL et un tableau de valeurs en une seule fois.

$array = ['Nashville', 'Knoxville'];
$parameters = str_repeat('?,', count($array) - 1) . '?';
$sql = "SELECT name FROM table WHERE city IN ($parameters)";
$result = $mysqli->execute_query($sql, $array);

2. Tableau dans exécuter() (PHP 8.1)

Dans PHP 8.1, vous pouvez transmettre un tableau directement à la méthode exécuter() sans avoir besoin d'espaces réservés ou de liaison.

$stmt = $mysqli->prepare($sql);
$stmt->execute($array);

3. Préparer/lier/exécuter pour les anciennes versions

Pour les versions antérieures à PHP 8.1, les étapes suivantes sont requises :

  • Créer une chaîne d'espaces réservés (par exemple, " ?, ?" pour un tableau de deux valeurs).
  • Ajoutez cette chaîne au requête.
  • Préparez l'instruction.
  • Créez une chaîne de types (par exemple, "ss" pour deux valeurs de chaîne).
  • Liez les valeurs du tableau à l'aide de l'argument unpacking opérateur.
$types = str_repeat('s', count($array));
$stmt->bind_param($types, ...$array);

Exemple :

$array = ['Nashville', 'Knoxville'];
$in = str_repeat('?,', count($array) - 1) . '?';
$sql = "SELECT name FROM table WHERE city IN ($in)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param(str_repeat('s', count($array)), ...$array);
$stmt->execute();
$result = $stmt->get_result();

En suivant ces approches, vous pouvez lier efficacement un tableau de chaînes à un WHERE IN (? ) clause dans les instructions préparées MySQLi.

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