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
DDDoriginal
2024-11-27 15:57:141016parcourir

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 ?, ?

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'

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);
  • 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);
  • Désactiver l'émulation Prépare : Désactivez les préparations émulées dans le pilote MySQL :
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);

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!

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