Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requête simple et préparée

Une marche, mais pas l'autre

Sujet résolu
    7 novembre 2010 à 22:22:04

    Bonjour,
    j'essaye d'écrire une requête préparée, mais elle ne marche pas...

    $query = <<<SQL
    SELECT * FROM 0_tuto_mini_chat ORDER BY id DESC LIMIT ?, 10
    SQL;
    			
    $sql = $db->prepare($query);
    $startLimit = ($_GET['page']-1)*10;
    $sql->execute( array($startLimit) ) or die( print_r($db->errorInfo()) );
    			
    while ( $datas = $sql->fetch() )
    {
       ?>
       <p>
       <strong><?php echo htmlspecialchars($datas['pseudo']); ?> : </strong><?php echo htmlspecialchars($datas['message']); ?>
       </p>
       <?php
    }
    $sql->closeCursor();
    


    ...Pourtant, la même requête "non préparée" marche bien :

    $startLimit = ($_GET['page']-1)*10;
    $query = <<<SQL
    SELECT * FROM 0_tuto_mini_chat ORDER BY id DESC LIMIT $startLimit, 10
    SQL;
    			
    $sql = $db->query($query);
    			
    while ( $datas = $sql->fetch() )
    {
       ?>
       <p>
       <strong><?php echo htmlspecialchars($datas['pseudo']); ?> : </strong><?php echo htmlspecialchars($datas['message']); ?>
       </p>
       <?php
    }
    $sql->closeCursor();
    


    C'est plus fort que du roquefort non ?
    Pouvez-vous m'aider à voir l'erreur svp ?
    • Partager sur Facebook
    • Partager sur Twitter
      8 novembre 2010 à 8:36:05

      bonjour,
      essaie ça :

      <?php
      $query = "SELECT * FROM 0_tuto_mini_chat ORDER BY id DESC LIMIT ?, 10";
      ?>
      

      • Partager sur Facebook
      • Partager sur Twitter
        8 novembre 2010 à 10:39:06

        C'est un bug limitation feature des "requêtes préparées" de mysql, le paramètre du LIMIT n'est pas compris dans le forfait, il faut l'insérer à l'ancienne.
        • Partager sur Facebook
        • Partager sur Twitter
          8 novembre 2010 à 21:59:06

          Merci Dark Vador, ça me rassure.
          sicilien007, je crois bien que tu me proposes une solution que j'ai déjà envisagée...
          A+
          • Partager sur Facebook
          • Partager sur Twitter
            9 novembre 2010 à 10:58:47

            Ah, apparemment j'aurais dit une connerie : cela pourrait marcher avec bindParam en spécifiant le type INT (à vérifier)
            • Partager sur Facebook
            • Partager sur Twitter

            Requête simple et préparée

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown