Instructions préparées MySQL avec l'opérateur IN
Cet article aborde le problème de la sélection de lignes dans une base de données à l'aide de l'opérateur IN et des instructions préparées dans MySQLi . Le code initial fourni par l'affiche originale :
$data_res = $_DB->prepare('SELECT `id`, `name`, `age` FROM `users` WHERE `lastname` IN (?)'); $data_res->bind_param('s', $in_statement); $data_res->execute();
n'a renvoyé aucun résultat, malgré les données existantes dans la base de données.
La solution consiste à lier manuellement chaque paramètre par référence :
$lastnames = array('braun', 'piorkowski', 'mason', 'nash'); $arParams = array(); foreach($lastnames as $key => $value) $arParams[] = &$lastnames[$key]; $count_params = count($arParams); $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); $data_res->execute();
Cette approche permet l'exécution correcte de l'instruction préparée avec l'opérateur IN, garantissant que toutes les données correspondant au tableau d'entrée sont renvoyées par la 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!