Maison >développement back-end >tutoriel php >Comment lier efficacement un tableau de chaînes à la clause IN d'une instruction préparée MySQLi ?

Comment lier efficacement un tableau de chaînes à la clause IN d'une instruction préparée MySQLi ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-24 15:50:11536parcourir

How to Efficiently Bind an Array of Strings to a MySQLi Prepared Statement's IN Clause?

Liaison d'un tableau de chaînes dans des instructions préparées par MySQLi pour une clause IN

Dans le domaine des interactions avec les bases de données, il peut y avoir des situations où vous nécessite de lier un tableau de valeurs de chaîne à la clause WHERE IN (?) dans une instruction préparée par MySQLi. Cet article approfondit les principes sous-jacents et propose des solutions élégantes, en se concentrant particulièrement sur les versions PHP 8.2, 8.1 et antérieures.

PHP 8.2 : une approche simplifiée

Le La fonction execute_query(), introduite dans PHP 8.2, rationalise le processus d'exécution d'instructions préparées avec des tableaux remplis de données. Par exemple :

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

Pour les cas impliquant un nombre d'espaces réservés dynamiques, vous pouvez utiliser str_repeat() pour construire les espaces réservés de manière dynamique :

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

PHP 8.1 : exécution directe de tableau

Dans PHP 8.1 et supérieur, vous pouvez exécuter directement une instruction préparée avec un tableau, en supprimant la nécessité d'une liaison explicite :

$sql = "SELECT name FROM table WHERE city IN (?,?)";
$stmt = $mysqli->prepare($sql);
$stmt->execute(["Nashville", "Knoxville"]);
$result = $stmt->get_result();

Versions antérieures : adopter la complexité

Pour les versions antérieures à PHP 8.1, la procédure est un peu plus complexe :

  • Créez une chaîne d'espace réservé avec le même nombre de points d'interrogation que les éléments du tableau en utilisant str_repeat().
  • Ajoutez cette chaîne d'espace réservé à la requête.
  • Préparez la requête de manière traditionnelle.
  • Construisez une chaîne de type pour bind_param() à l'aide de str_repeat(), généralement en utilisant "s" pour les chaînes.
  • Utilisez l'opérateur de décompression d'argument (...) pour lier les valeurs du tableau en masse.
  • Exécutez la requête et récupérez les résultats.

Exemple :

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

Bien que légèrement plus verbeux, ce code propose une solution concise par rapport aux approches alternatives.

En conclusion, lier un tableau de chaînes à une clause IN dans MySQLi préparé Les instructions impliquent plusieurs méthodes adaptées aux différentes versions de PHP. En tirant parti des techniques décrites dans cet article, vous pouvez exécuter efficacement ces requêtes dans vos interactions de base de données.

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