Problème :
Lors de l'utilisation d'instructions préparées avec la clause LIMIT dans MySQL, il échoue lorsque les paramètres sont passés comme chaînes.
SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT ?, ?
$comments = $db->prepare($query); $comments->execute(array($post, $min, $max));
Réponse :
Le problème se pose car la méthode PDOStatement::execute() traite tous les paramètres comme des chaînes, ce qui conduit à un message non valide. Instruction SQL. Ceci est aggravé par le fait que MySQL ne convertit pas les paramètres de chaîne en nombres, ce qui entraîne une erreur d'analyse.
Solutions :
$comments->bindParam(1, $post, PDO::PARAM_STR); $comments->bindParam(2, $min, PDO::PARAM_INT); $comments->bindParam(3, $min, 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);
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!