Requette SQL

Résolu
Bonjour, j'aimerais afficher des données enregistrées dans ma base de données, alors j'ai écris ce code là :

<?php
$cod = $_GET['code'];
$req2 = $bdd->query('SELECT * FROM annonces WHERE Code =: $cod');

while($donnees = $req2->fetch())
{
?>
<p class="pseudo">
<?php echo $donnees['pseudo']; ?>
</p>

<a href="Profil.php" class="profil">Voir le profil de l'annonceur</a>
<?php
}
?>

Mais à chaque fois, j'ai l'erreur :

Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\Servicity\rechercher.php on line 233

Alors je pense que cette erreur vient du fait que la requête a été bien posée, mais je ne vois pas trop où...
Alors est-ce que le code est suffisant pour que vous puissiez voir une éventuelle erreur ?
Merci d'avance !

5 réponses

  1. salut,

    fais ça par étape :

    pose
    $req2='SELECT * FROM annonces WHERE Code =: $cod';


    puis ensuite affiches là :
    echo $req2;


    et executes le code SQL affiché dans ton SGBD

    si ça marche pas donnes nous ce qui est affiché par echo $req2
    1. Bonsoir,

      Et ceci: ???

      $cod = $_GET['code'];
      $req2 = $bdd->query("SELECT * FROM annonces WHERE Code =: $cod");  


      Est-ce que $cod est un entier? Si oui, évitez l'injection de code SQL:

      $cod = (int) $_GET['code'];
      $req2 = $bdd->query("SELECT * FROM annonces WHERE Code =: $cod"); 

      1. Non ça ne marche toujours pas... J'ai mélangez vos deux codes ( parce que Code est bien un entier), alors j'ai écris ce code là :

        <?php
        $cod = (int) $_GET['code'];
        $req2='SELECT * FROM annonces WHERE Code =: $cod';
        echo $req2;

        while($donnees = $req2->fetch())
        {
        ?>
        <p class="pseudo">
        <?php echo $donnees['pseudo']; ?>
        </p>

        <a href="Profil.php" class="profil">Voir le profil de l'annonceur</a>
        <?php
        }
        }
        ?>

        Et j'obtiens le message :

        SELECT * FROM annonces WHERE Code =: $cod
        Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\Servicity\rechercher.php on line 234
        1. Bonjour,

          1) Enlève les : dans ta requête SQL
          2) En PHP, si tu utilises des guillemets simples, les variables ne sont pas remplacées par leur valeur. Donc '$cod' donne $cod. Utilise des guillemets doubles : "$cod" donne 876 (par exemple).

          Ta ligne devient :
          $req2 = "SELECT * FROM annonces WHERE Code = $cod";

          Ou, si tu tiens aux guillemets simples :
          $req2 = 'SELECT * FROM annonces WHERE Code = ' . $cod;


          Xavier
          1. le (int) est très important.

            Si dans l'URL une personne entre autre chose que une valeur entière, ça bloquera l'injection de code
          2. Bien sûr ! J'ai enlevé cette partie du code parce qu'il l'avait intégrée et ne rentrait pas en ligne de compte dans la correction que je propose...
        2. J'ai résolu le problème ! Effectivement, les " marchent mieux que les ' pour la requête, et j'ai écris ce code là :

          <?php
          $cod = (int) $_GET['code'];
          $req2=$bdd->query("SELECT * FROM annonces WHERE Code = $cod");

          while($donnees = $req2->fetch())
          {
          ?>
          <p class="pseudo">
          <?php echo $donnees['pseudo']; ?>
          </p>

          <a href="Profil.php" class="profil">Voir le profil de l'annonceur</a>
          <?php
          }
          }
          ?>
          Et ca marche nickel !