Maison  >  Article  >  développement back-end  >  Comment lier en toute sécurité un tableau à une instruction MySQL IN à l'aide de PDO ?

Comment lier en toute sécurité un tableau à une instruction MySQL IN à l'aide de PDO ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-27 22:45:15546parcourir

How to Safely Bind an Array to a MySQL IN Statement Using 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!

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