Maison > base de données > tutoriel mysql > Pourquoi mon instruction préparée MySQL avec LIMIT échoue-t-elle lors de l'utilisation de paramètres de chaîne ?

Pourquoi mon instruction préparée MySQL avec LIMIT échoue-t-elle lors de l'utilisation de paramètres de chaîne ?

Susan Sarandon
Libérer: 2024-12-06 15:01:11
original
981 Les gens l'ont consulté

Why Does My MySQL Prepared Statement with LIMIT Fail When Using String Parameters?

Mot clé LIMIT sur MySQL avec instruction préparée

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 ?, ?
Copier après la connexion
$comments = $db->prepare($query);
$comments->execute(array($post, $min, $max));
Copier après la connexion

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 :

  • Lier les paramètres Individuellement :
$comments->bindParam(1, $post, PDO::PARAM_STR);
$comments->bindParam(2, $min, PDO::PARAM_INT);
$comments->bindParam(3, $min, PDO::PARAM_INT);
Copier après la connexion
  • Utiliser sprintf() pour coder en dur les paramètres numériques :
$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 les préparations émulées :
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
Copier après la connexion

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