Instructions préparées MySQL avec l'opérateur IN
Les instructions préparées offrent une sécurité et des performances améliorées par rapport aux requêtes traditionnelles en vous permettant de spécifier les valeurs des paramètres séparément de la déclaration elle-même. Cependant, lorsqu'il s'agit d'utiliser des instructions préparées avec l'opérateur IN, vous pouvez rencontrer des problèmes si votre approche n'est pas correcte.
Le problème
Comme mentionné dans la déclaration initiale requête, lier une chaîne de valeurs séparées par des virgules à l'instruction préparée à l'aide de bind_param('s', $in_statement) ne donnera pas de résultats, même si les données existent dans le base de données.
La solution
La solution réside dans le traitement de chaque valeur de paramètre individuellement :
Exemple Code
<?php $lastnames = ['braun', 'piorkowski', 'mason', 'nash']; $arParams = []; 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 = $mysqli->prepare("SELECT `id`, `name`, `age` FROM `users` WHERE `lastname` IN ({$params})"); call_user_func_array([$data_res, 'bind_param'], $arParams); $data_res->execute(); $result = $data_res->get_result(); while ($data = $result->fetch_array(MYSQLI_ASSOC)) { // Your code here... } $result->free(); $data_res->close();
Cette approche vous permet de lier correctement plusieurs valeurs à l'instruction préparée à l'aide de l'opérateur IN.
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!