Maison > développement back-end > tutoriel php > Comment utiliser correctement LIMIT dans les instructions préparées MySQL avec PDO ?

Comment utiliser correctement LIMIT dans les instructions préparées MySQL avec PDO ?

DDD
Libérer: 2024-11-27 15:57:14
original
971 Les gens l'ont consulté

How to Correctly Use LIMIT in MySQL Prepared Statements with PDO?

Utilisation du mot-clé LIMIT dans l'instruction préparée MySQL

Lors de l'utilisation d'instructions préparées dans MySQL avec PDO, vous pouvez rencontrer des problèmes avec le mot-clé LIMIT. La requête suivante :

SELECT id, content, date
FROM comment
WHERE post = ?
ORDER BY date DESC
LIMIT ?, ?
Copier après la connexion

ne fonctionnera pas avec les instructions préparées par PDO, si vous la modifiez en LIMIT 0, 10 le fera. Ce problème est enraciné dans la façon dont PDO gère les paramètres.

Liaison de paramètres PDO

PDOStatement::execute() traite tous les paramètres d'entrée comme des chaînes par défaut. En conséquence, les paramètres $min et $max dans la clause LIMIT seront insérés sous forme de chaînes. MySQL analysera alors la requête comme :

LIMIT '0', '10'
Copier après la connexion

conduisant à une erreur d'analyse.

Solutions

Il existe plusieurs façons de résoudre ce problème :

  • Lier les paramètres individuellement : Spécifier le type de chaque paramètre à l'aide de bindParam() :
$comments->bindParam(1, $post, PDO::PARAM_STR);
$comments->bindParam(2, $min, PDO::PARAM_INT);
$comments->bindParam(3, $max, PDO::PARAM_INT);
Copier après la connexion
  • Exclure les paramètres de la requête : Supprimez les paramètres $min et $max de la requête et spécifiez-les dans le cadre de la requête :
$query = sprintf('SELECT id, content, date
    FROM comment
    WHERE post = ?
    ORDER BY date DESC
    LIMIT %d, %d', $min, $max);
Copier après la connexion
  • Désactiver l'émulation Prépare : Désactivez les préparations émulées dans le pilote MySQL :
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
Copier après la connexion

En implémentant l'une de ces solutions, vous pouvez utiliser avec succès le mot-clé LIMIT avec des instructions préparées dans MySQL.

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.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal