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 :
$comments->bindParam(1, $post, PDO::PARAM_STR); $comments->bindParam(2, $min, PDO::PARAM_INT); $comments->bindParam(3, $max, PDO::PARAM_INT);
$query = sprintf('SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT %d, %d', $min, $max);
$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!