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
Barbara Streisandoriginal
2024-11-26 19:27:10863parcourir

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

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'

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);
  • 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!

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