Requette SQL

Résolu/Fermé
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 - 30 janv. 2014 à 18:50
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 31 janv. 2014 à 15:53
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 mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 199
30 janv. 2014 à 18:56
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 mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
30 janv. 2014 à 20:40
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 mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 6
31 janv. 2014 à 12:31
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 jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
31 janv. 2014 à 13:43
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 mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
31 janv. 2014 à 13:51
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 jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
31 janv. 2014 à 15:53
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 mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 6
31 janv. 2014 à 15:08
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