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

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

Mary-Kate Olsen
Libérer: 2024-12-27 00:12:10
original
381 Les gens l'ont consulté

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

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 :

  1. Créer un tableau avec des clés numérotées et transmettre des valeurs à lui explicitement par référence.
  2. Comptez le nombre de paramètres et créez une chaîne avec le nombre approprié de i caractères, représentant leurs données type.
  3. Combinez la chaîne de type de données avec un tableau de points d'interrogation pour former la chaîne de paramètres pour l'instruction préparée.
  4. Décalez la chaîne de type de données dans le tableau de valeurs de paramètres.
  5. Utilisez call_user_func_array pour lier le tableau de valeurs de paramètres à l'instruction préparée.

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();
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal