Maison > Article > développement back-end > Comment lier en toute sécurité un tableau à une instruction MySQL IN à l'aide de PDO ?
Valeurs de liaison PDO pour l'instruction MySQL IN
Question :
Comment peut-on lier un tableau de valeurs dans une instruction MySQL IN utilisant PDO tout en conservant les valeurs individuelles dans le déclaration ?
Réponse :
Lier un tableau de valeurs à une instruction IN dans MySQL à l'aide de PDO présente un défi en raison de la manière dont PDO échappe aux valeurs. Par défaut, PDO échappe les valeurs de chaîne avec des guillemets simples. Cela a pour résultat que le tableau entier est traité comme une seule chaîne dans la clause IN, plutôt que comme des éléments individuels.
Malheureusement, il n'existe pas de méthode simple pour y parvenir directement avec PDO. Il existe cependant des approches alternatives :
1. Construire la requête manuellement
Comme suggéré dans la question référencée, on peut construire la requête manuellement en concaténant les valeurs dans la clause IN :
$sql = "SELECT users.id FROM users JOIN products ON products.user_id = users.id WHERE products IN (" . implode(',', $values) . ")";
2. Utilisation de FIND_IN_SET
FIND_IN_SET est une fonction MySQL qui permet de rechercher une sous-chaîne dans une liste séparée par des virgules. Cette approche implique l'utilisation de la liste citée, séparée par des virgules, comme argument de FIND_IN_SET :
$sql = "SELECT users.id FROM users JOIN products ON products.user_id = users.id WHERE FIND_IN_SET(CAST(products.id AS CHAR), :products)";
Cependant, FIND_IN_SET peut avoir des implications en termes de performances pour les grands ensembles de données.
3. Création d'une fonction définie par l'utilisateur (UDF)
Des UDF peuvent être créées dans MySQL pour effectuer des opérations personnalisées. On peut créer une UDF qui divise la liste séparée par des virgules en valeurs individuelles. Cette méthode est considérée comme l'option la plus efficace pour les requêtes avec de grandes clauses IN.
En employant l'une de ces approches, vous pouvez lier efficacement un tableau de valeurs à une instruction MySQL IN tout en conservant les valeurs individuelles dans l'instruction.
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!