Maison >développement back-end >tutoriel php >Comment puis-je utiliser efficacement des tableaux avec des instructions préparées MySQL dans les clauses WHERE ... IN() ?

Comment puis-je utiliser efficacement des tableaux avec des instructions préparées MySQL dans les clauses WHERE ... IN() ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-29 04:06:13216parcourir

How Can I Efficiently Use Arrays with MySQL Prepared Statements in WHERE ... IN() Clauses?

Utilisation de tableaux dans les instructions préparées MySQL pour les requêtes WHERE ... IN(...)

Lors de l'interrogation d'une base de données à l'aide d'instructions préparées, il est recommandé de préparer une seule instruction et de l'exécuter plusieurs fois pour améliorer les performances. Cependant, lorsqu'il s'agit d'un tableau d'ID pour une requête WHERE ... IN(...), le tri manuel des résultats après l'exécution peut s'avérer inefficace.

Une approche alternative consiste à utiliser une technique qui implique la création une liste d'espaces réservés (?) séparés par des virgules en fonction de la longueur du tableau. Prenons l'exemple suivant :

$ids = array(1,5,18,25);

// Create a string containing ?,?,?
$clause = implode(',', array_fill(0, count($ids), '?'));

$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id` IN (' . $clause . ') ORDER BY `name`;');

call_user_func_array(array($stmt, 'bind_param'), $ids);
$stmt->execute();

// Loop through results

Dans cette approche, implode(...) crée une chaîne avec le nombre requis d'espaces réservés. La fonction call_user_func_array(...) lie ensuite les valeurs du tableau $ids aux espaces réservés. En utilisant cette technique, vous pouvez trier les résultats à l'aide de la fonctionnalité de tri intégrée de MySQL, éliminant ainsi le besoin d'un tri manuel.

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