Maison  >  Article  >  base de données  >  Comment résoudre l'erreur lors de la transmission des paramètres de tableau avec la clause LIMIT dans PDO ?

Comment résoudre l'erreur lors de la transmission des paramètres de tableau avec la clause LIMIT dans PDO ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-23 19:46:31625parcourir

How to Resolve Error When Passing Array Parameters with LIMIT Clause in PDO?

Passer un tableau de paramètres PDO avec la clause LIMIT

Introduction :

Lorsque vous travaillez avec PDO , il peut être difficile de transmettre un tableau de paramètres et d'utiliser simultanément la clause LIMIT. Cet article fournit une solution à ce problème.

Énoncé du problème :

Étant donné la requête SQL suivante :

SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%')
LIMIT :limit1, :limit2

Vous souhaitez exécuter ceci requête utilisant un tableau de paramètres, comme indiqué ci-dessous :

$stmt->execute($array);

Cependant, l'utilisation de la méthode bindParam() pour les paramètres LIMIT (:limit1 et :limit2) entraîne une erreur.

Solution :

La solution réside dans la désactivation du paramètre PDO par défaut de PDO::ATTR_EMULATE_PREPARES. Ce paramètre demande essentiellement à PDO d'émuler les instructions préparées, plutôt que de les utiliser de manière native.

Pour désactiver ce paramètre :

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

Une fois ce paramètre désactivé, la requête peut être préparée et exécutée avec le tableau de paramètres, y compris les valeurs LIMIT :

$stmt = $pdo->prepare($sql);
$stmt->execute(array(5)); //works!

Implications :

La désactivation de PDO::ATTR_EMULATE_PREPARES peut améliorer les performances, car elle supprime la surcharge d'émulation préparée déclarations. Cependant, il convient de noter que ce paramètre est activé par défaut pour des raisons de performances.

Ressources supplémentaires :

  • [PDO MySQL : Utiliser PDO : ATTR_EMULATE_PREPARES ou pas ?](https://pdosql.org/pdo-mysql-use-pdo-attr-emulate-prepares-or-not/)

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