Maison >base de données >tutoriel mysql >Comment utiliser correctement les instructions préparées par MySQLi avec l'opérateur IN ?

Comment utiliser correctement les instructions préparées par MySQLi avec l'opérateur IN ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-29 14:37:12704parcourir

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

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!

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