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!