Maison >développement back-end >tutoriel php >Comment lier efficacement un tableau de chaînes à une clause MySQL WHERE IN(?) à l'aide des instructions préparées mysqli de PHP ?

Comment lier efficacement un tableau de chaînes à une clause MySQL WHERE IN(?) à l'aide des instructions préparées mysqli de PHP ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-24 01:57:131014parcourir

How to Efficiently Bind an Array of Strings to a MySQL WHERE IN(?) Clause Using PHP's mysqli Prepared Statements?

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

Liaison d'un tableau de valeurs à la clause WHERE IN (?) est une tâche MySQL courante. Lorsque vous utilisez les instructions préparées par MySQLi de PHP, cela peut être difficile à réaliser si vous n'êtes pas familier avec les limitations et les nuances de la fonction bind_param().

Le problème

Vous pouvez rencontrer des problèmes lorsque vous essayez de lier un tableau de valeurs à la clause IN(?) à l'aide de bind_param(), ce qui entraîne un échec. exécution.

La solution

Il existe différentes manières d'aborder cette tâche, selon la version de PHP que vous utilisez :

PHP 8.2 et supérieur

  • execute_query() function: Cette fonction permet de passer directement un tableau de valeurs à IN(?). Cela simplifie le processus avec une seule ligne de code.

PHP 8.1

  • Passer un tableau à exécuter() : Dans PHP 8.1, vous pouvez passer un tableau directement à execute() pour les instructions préparées, ce qui simplifie la liaison de plusieurs valeurs.

Versions PHP antérieures

Pour les anciennes versions, une approche plus élaborée est nécessaire :

  1. Créer une chaîne avec autant de points d'interrogation (?) que de nombre d'éléments dans le tableau.
  2. Ajouter la chaîne avec des espaces réservés à la requête string.
  3. Créez une chaîne de types en utilisant str_repeat() pour lier les données avec les types corrects (par exemple, 's' pour les chaînes).
  4. Liez les éléments du tableau à l'instruction en utilisant l'argument unpacking opérateur (...) dans bind_param().
  5. Exécuter l'instruction et récupérer le résultat data.

Exemple de code

Voici un exemple utilisant l'approche des versions PHP antérieures :

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

En comprenant ces approches, vous pouvez lier efficacement un tableau de chaînes à une clause WHERE IN(?) à l'aide d'instructions préparées par mysqli, garantissant ainsi l'exécution réussie de vos requêtes.

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