Maison >base de données >tutoriel mysql >Comment utiliser correctement l'opérateur IN avec des instructions préparées MySQLi et plusieurs paramètres ?

Comment utiliser correctement l'opérateur IN avec des instructions préparées MySQLi et plusieurs paramètres ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-17 17:06:15645parcourir

How to Correctly Use the IN Operator with MySQLi Prepared Statements and Multiple Parameters?

Utilisation de l'opérateur IN avec les instructions préparées MySQLi

Lors de l'utilisation de l'opérateur IN avec l'opérateur IN dans les instructions préparées MySQLi, il est crucial de formater correctement les paramètres. Le code initial fourni :

$data_res = $_DB->prepare('SELECT `id`, `name`, `age` FROM `users` WHERE `lastname` IN (?)');
$data_res->bind_param('s', $in_statement);

implique une erreur car $in_statement est une chaîne plutôt qu'un tableau de valeurs. Pour résoudre ce problème, une approche alternative utilisant la fonction call_user_func_array est présentée :

$int = str_repeat('i', $count_params);
array_unshift($arParams, $int);

$q = array_fill(0, $count_params, '?');
$params = implode(',', $q);

$data_res = $_DB->prepare('SELECT `id`, `name`, `age` FROM `users` WHERE `lastname` IN ('.$params.')');
call_user_func_array(array($data_res, 'bind_param'), $arParams);

Dans ce code modifié :

  • $count_params détermine le nombre de paramètres à transmettre.
  • str_repeat('i', $count_params) crée une chaîne de i caractères égale au nombre de paramètres, représentant le type de données pour chaque paramètre.
  • array_unshift($arParams, $int) ajoute la chaîne de type de données au tableau $arParams.
  • array_fill(0, $count_params, '?') génère une chaîne de points d'interrogation pour la clause IN.
  • call_user_func_array est utilisé pour lier plusieurs paramètres simultanément, en passant le tableau $arParams comme argument.

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