Maison > base de données > tutoriel mysql > 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
Libérer: 2024-10-23 19:46:31
original
708 Les gens l'ont consulté

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
Copier après la connexion

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

$stmt->execute($array);
Copier après la connexion

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);
Copier après la connexion

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!
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal