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