Utilisation de PDO: [1]
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
$statement = $pdo->prepare($select);
$statement->execute($ids);
Utilisation de MySQLi [2]
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
$statement = $mysqli->prepare($select);
$statement->bind_param(str_repeat('i', count($ids)), ...$ids);
$statement->execute();
$result = $statement->get_result();
Explication:
Utilisez l' IN()
opérateur SQL pour vérifier si une valeur existe dans une liste donnée.
En général, cela ressemble à ceci:
expr IN (value,...)
Nous pouvons construire une expression à placer à l'intérieur ()
de notre tableau. Notez qu'il doit y avoir au moins une valeur entre parenthèses ou MySQL retournera une erreur; cela revient à s'assurer que notre tableau d'entrée a au moins une valeur. Pour éviter les attaques par injection SQL, générez d'abord un ?
pour chaque élément d'entrée afin de créer une requête paramétrée. Ici, je suppose que le tableau contenant vos identifiants est appelé $ids
:
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
Étant donné un tableau d'entrée de trois éléments $select
ressemblera à:
SELECT *
FROM galleries
WHERE id IN (?, ?, ?)
Notez à nouveau qu'il y a un ?
pour chaque élément dans le tableau d'entrée. Ensuite, nous utiliserons PDO ou MySQLi pour préparer et exécuter la requête comme indiqué ci-dessus.
Utilisation de l' IN()
opérateur avec des chaînes
Il est facile de basculer entre chaînes et entiers en raison des paramètres liés. Pour PDO, aucun changement n'est requis; pour le changement MySQLi str_repeat('i',
à str_repeat('s',
si vous devez vérifier les chaînes.
[1]: J'ai omis certaines erreurs de vérification de la brièveté. Vous devez vérifier les erreurs habituelles pour chaque méthode de base de données (ou définir votre pilote de base de données pour lever des exceptions).
[2]: Nécessite PHP 5.6 ou supérieur. Encore une fois, j'ai omis de vérifier la brièveté des erreurs.