Maison >base de données >tutoriel mysql >Comment utiliser correctement les instructions préparées par MySQLi avec l'opérateur IN ?
Instructions préparées MySQL avec l'opérateur IN
Dans les requêtes de base de données, l'opérateur IN vous permet de rechercher des valeurs spécifiques dans une liste. Lorsque vous utilisez des instructions préparées par MySQLi avec l'opérateur IN, il est crucial de suivre la syntaxe appropriée pour garantir des résultats précis.
Dans le code fourni, vous rencontrez un problème où la requête ne renvoie aucun résultat, malgré l'existence d'une correspondance. données dans la base de données. Cela est probablement dû à une erreur dans l'étape de préparation.
La solution, comme vous l'avez découvert, consiste à transmettre explicitement chaque paramètre par référence à l'aide de la fonction call_user_func_array(). En effet, la méthode bind_param() s'attend à ce que les paramètres soient transmis directement par valeur.
En passant les paramètres par référence, MySQLi récupère avec précision les valeurs et exécute la requête correctement. Voici un exemple du code modifié :
$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();
En effectuant cette modification, l'instruction préparée s'exécutera comme prévu et renverra les résultats souhaités.
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!