Maison >développement back-end >tutoriel php >Comment puis-je utiliser efficacement les instructions préparées avec les filtres de tableau dans la clause « WHERE ... IN() » de MySQL ?

Comment puis-je utiliser efficacement les instructions préparées avec les filtres de tableau dans la clause « WHERE ... IN() » de MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-16 16:33:11763parcourir

How Can I Efficiently Use Prepared Statements with Array Filters in MySQL's `WHERE ... IN()` Clause?

Instruction préparée avec filtre de tableau : requête 'WHERE .. IN(..)'

Problème

Considérez la requête suivante qui récupère les lignes en fonction sur des identifiants spécifiques :

SELECT * FROM somewhere WHERE `id` IN(1,5,18,25) ORDER BY `name`;

Étant donné un tableau d'identifiants ($ids) à fetch, il est recommandé d'utiliser des instructions préparées pour plus d'efficacité. Cependant, l'utilisation d'une boucle pour parcourir le tableau et lier chaque ID séparément nécessite un tri manuel ultérieur des résultats.

Solution

Pour simplifier ce processus et maintenir l'ordre MySQL, une approche alternative existe :

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

// Construct a placeholder string containing ?,?,? etc.
$clause = implode(',', array_fill(0, count($ids), '?'));

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

// Bind all IDs to the placeholder string using call_user_func_array
call_user_func_array(array($stmt, 'bind_param'), $ids);
$stmt->execute();

// Iterate over the results

Cette méthode lie tous les identifiants à la chaîne d'espace réservé en un seul appel, permettant à MySQL d'effectuer le filtrage et le tri efficacement.

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