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

Comment lier correctement un tableau de chaînes à une instruction préparée par MySQLi ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-28 10:47:10975parcourir

How to Correctly Bind an Array of Strings to a MySQLi Prepared Statement?

Liaison d'un tableau de chaînes avec une instruction préparée mysqi

Lorsque vous travaillez avec MySQL, il est souvent nécessaire de lier un tableau de valeurs à un Clause WHERE IN utilisant une instruction préparée. Bien que cette tâche puisse sembler simple, il existe quelques pièges potentiels qui peuvent conduire à des erreurs.

Dans cet article, nous explorerons l'approche correcte pour lier un tableau de chaînes à l'aide d'instructions préparées par mysqli. Nous fournirons également une explication détaillée des étapes à suivre et discuterons d'une solution potentielle.

Qu'est-ce qui ne va pas ?

L'exemple de code fourni dans la question tente de manière incorrecte de liez un tableau de villes à une instruction préparée à l'aide de bind_param. Cependant, bind_param attend des valeurs scalaires (par exemple, des chaînes, des entiers, etc.) comme arguments. Tenter de lier directement un tableau entraînera une erreur.

L'approche correcte

Pour réussir à lier un tableau de chaînes à une instruction préparée, nous pouvons utiliser ce qui suit étapes :

  1. Créez une chaîne d'espaces réservés : Tout d'abord, créez une chaîne composée du nombre approprié de des points d'interrogation (?) pour représenter les espaces réservés pour les éléments du tableau.
  2. Insérez la chaîne d'espace réservé dans la requête : Remplacez la clause WHERE IN par la chaîne d'espaces réservés.
  3. Préparez et liez l'instruction : Préparez la requête modifiée et liez les éléments du tableau en utilisant les spécificateurs de type corrects (par exemple, 's' pour les chaînes).
  4. Exécutez la requête :Exécutez l'instruction préparée pour récupérer les résultats.

Exemple de code

Voici un exemple du code correct :

$mysqli = new mysqli("localhost", "root", "root", "db");
if(!$mysqli || $mysqli->connect_errno) { return; }

$cities = explode(",", $_GET['cities']);
$in = str_repeat('?,', count($cities) - 1) . '?';
$query_str = "SELECT name FROM table WHERE city IN ($in)";

$query_prepared = $mysqli->stmt_init();
if($query_prepared && $query_prepared->prepare($query_str)) {
    $types = str_repeat('s', count($cities));
    $query_prepared->bind_param($types, ...$cities);
    $query_prepared->execute();
}

Dans ce Par exemple, nous créons d’abord une chaîne d’espaces réservés en utilisant str_repeat. Nous insérons ensuite cette chaîne d'espace réservé dans la requête et préparons l'instruction. Remarquez comment nous lions les éléments individuels du tableau villes en utilisant ...$cities et spécifions le type de données en utilisant str_repeat('s', count($cities)).

En suivant ces étapes, nous pouvons réussir liez un tableau de chaînes à une instruction préparée par mysqli et exécutez la requête comme prévu.

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