Maison > développement back-end > tutoriel php > Pourquoi LIMIT ne fonctionne-t-il pas avec les instructions préparées dans MySQL ?

Pourquoi LIMIT ne fonctionne-t-il pas avec les instructions préparées dans MySQL ?

Barbara Streisand
Libérer: 2024-11-26 19:27:10
original
845 Les gens l'ont consulté

Why Doesn't LIMIT Work with Prepared Statements in MySQL?

Mot clé LIMIT avec instructions préparées dans MySQL

Cette question résout un problème où la clause LIMIT ne fonctionne pas comme prévu lors de l'utilisation d'instructions préparées avec la bibliothèque PDO dans MySQL.

Dans le code fourni extrait :

<pre class="brush:php;toolbar:false">
$comments = $db->prepare($query); 
/* where $db is the PDO object */ 
$comments->execute(array($post, $min, $max)); 
Copier après la connexion

Les paramètres $min et $max sont traités comme des chaînes par la méthode PDOStatement::execute. Par conséquent, l'instruction SQL finale devient :

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

ce qui entraîne une erreur de syntaxe car MySQL nécessite des valeurs numériques pour la clause LIMIT.

Solutions possibles :

Pour résoudre ce problème, envisagez les options suivantes :

  • Lier Paramètres manuellement :

    • Liez chaque paramètre avec un type approprié à l'aide de bindParam.
    • Par exemple : $comments->bindParam(2, $min, PDO::PARAM_INT );
  • Utiliser la chaîne Interpolation :

    • Incorporez les valeurs $min et $max directement dans la chaîne de requête à l'aide de sprintf.
    • Exemple :

      $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éfinissez l'attribut PDO::ATTR_EMULATE_PREPARES sur FALSE pour empêcher MySQL de citer des arguments numériques.
    • Exemple : $db->setAttribute(PDO::ATTR_EMULATE_PREPARES , FALSE);

Remarque :
Ces méthodes vous permettront d'utiliser correctement la clause LIMIT avec des instructions préparées.

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