Utilisation de tableaux dans les instructions préparées MySQL pour les requêtes "WHERE ... IN (...)"
Dans les requêtes de base de données, en utilisant IN Les instructions peuvent optimiser les performances en réduisant le nombre d'appels à la base de données. Ceci est particulièrement utile lorsque vous travaillez avec de grands ensembles de données. Imaginez une requête comme celle-ci :
SELECT * FROM somewhere WHERE `id` IN(1,5,18,25) ORDER BY `name`;
Si vous avez un tableau d'identifiants à récupérer, tel que $ids = array(1,5,18,25), vous pouvez envisager d'utiliser des instructions préparées. Les instructions préparées empêchent les attaques par injection SQL et améliorent les performances. Voici un exemple d'utilisation d'instructions préparées avec un seul identifiant :
$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id`=?;'); foreach ($ids as $id){ $stmt->bind_params('i', $id); $stmt->exec(); }
Cependant, cette approche nécessiterait un tri manuel des résultats. Au lieu de cela, vous pouvez utiliser une alternative plus efficace en créant une chaîne avec des espaces réservés (?) et en utilisant la fonction implode() pour les séparer par des virgules.
$clause = implode(',', array_fill(0, count($ids), '?'));
Ensuite, préparez l'instruction avec la clause et liez le tableau $ids à l'aide de call_user_func_array().
$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id` IN (' . $clause . ') ORDER BY `name`;'); call_user_func_array(array($stmt, 'bind_param'), $ids); $stmt->execute();
Cette approche permet à MySQL de gérer le tri efficacement, vous faisant gagner du temps et effort.
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!