Requette SQL

Résolu
parousky Messages postés 325 Date d'inscription   Statut Membre Dernière intervention   -  
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   -
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 !
A voir également:

5 réponses

totodunet Messages postés 1377 Date d'inscription   Statut Membre Dernière intervention   200
 
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
0
mpmp93 Messages postés 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
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"); 

0
parousky Messages postés 325 Date d'inscription   Statut Membre Dernière intervention   6
 
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
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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
0
mpmp93 Messages postés 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
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
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
parousky Messages postés 325 Date d'inscription   Statut Membre Dernière intervention   6
 
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 !
0