Page 1 sur 2

Erreur requête MySQL

Posté : 14 nov. 2010, 13:46
par voblivion
J'ai un petit problème, que je n'arrive pas à résoudre.
En fait je voudrais avant inscription d'un nouveau pseudo dans une base de donnée, vérifier que celui-ci est libre.
Petit pépin, lorsque j'ouvre ma base et tente de vérifier que parmi tous les pseudo existants, aucuns n'est égal à celui entré par l'utilisateur, il m'affiche un message d'erreur tel celui-ci:
Fatal error: Call to a member function execute() on a non-object in E:\wamp\www\PHP Test\test.php on line 14
Avec un petit "or die(print_r($bdd->errorInfo()))" le message devient:
Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1 ) 1
Je vous ai donc copié ici l'entité de mon code.
J’espère que vous pourrez m'aider à trouver l'erreur ..


Code : Tout sélectionner

<?php try { $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $Pseudo=$_POST['Pseudo']; $disp=0; //L'ERREUR SE TROUVE ICI $reponse = $bdd->query('SELECT Nom FROM inscription WHERE Nom=?'); $req->execute(array($_POST['Pseudo'])); while ($donnees = $reponse->fetch()) { $disp = $disp + 1; } if ($disp = 0) { $req = $bdd->prepare('INSERT INTO inscription(Nom) VALUES(:Nom)'); $req->execute(array( 'Nom' => $Pseudo )); } $reponse->closeCursor(); } ?>
Et là voici la partie html .. sans importance car ça je pense ne pas trop y avoir fais d'erreurs.

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>Bienvenue sur mon site !</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <form method="POST" action="test.php"> <span> Pseudo:<span/><br/> <input type="text" name="Pseudo"/><br/> <input type="reset" name="Reset" /> <input type="submit" name="Inscription" value="Inscription" /><br/> <?php if ($disp = 0) { echo 'Inscription validée'; } else { echo 'Pseudo déjà utilisé'; } ?> </form> </body> </html>

Re: Erreur requête MySQL

Posté : 14 nov. 2010, 14:38
par Invité
salut,

sans importance le html ? ??? tu as oublié les 'value' dans tes input :D
a+

Re: Erreur requête MySQL

Posté : 14 nov. 2010, 20:40
par stealth35

Re: Erreur requête MySQL

Posté : 14 nov. 2010, 21:43
par voblivion
Je vais passer voir ces deux choses .. (quelle erreur de naze !)

Re: Erreur requête MySQL

Posté : 15 nov. 2010, 00:41
par dunbar
Salut,

Ceci n'est pas juste
'Nom' => $Pseudo
Correction
':Nom' => $Pseudo

Re: Erreur requête MySQL

Posté : 15 nov. 2010, 00:45
par stealth35
Salut,

Ceci n'est pas juste
'Nom' => $Pseudo
Correction
':Nom' => $Pseudo
non non les deux façons sont corrects :wink:

Re: Erreur requête MySQL

Posté : 15 nov. 2010, 14:45
par pierreC
Enfin tout ceci ne doit pas bcp aider voblivion .

Le message d'erreur indique que tu utilises une méthode d'un objet qui n'existe pas : Call to a member function execute() on a non-object

et en effet l'objet $req à mon avis n'est pas un objet :

Code : Tout sélectionner

$req->execute(array($_POST['Pseudo']));
ne serait ce pas plutot $bdd qu'il faut utiliser ? (ne connaissait pas du tout PDO)

Code : Tout sélectionner

$bdd->execute(array($_POST['Pseudo']));
Pierre.

Re: Erreur requête MySQL

Posté : 15 nov. 2010, 14:48
par stealth35
Enfin tout ceci ne doit pas bcp aider voblivion .

Le message d'erreur indique que tu utilises une méthode d'un objet qui n'existe pas : Call to a member function execute() on a non-object

et en effet l'objet $req à mon avis n'est pas un objet :

Code : Tout sélectionner

$req->execute(array($_POST['Pseudo']));
ne serait ce pas plutot $bdd qu'il faut utiliser ? (ne connaissait pas du tout PDO)

Code : Tout sélectionner

$bdd->execute(array($_POST['Pseudo']));
Pierre.
ca l'aide pas non plus t'en qu'il a pas activer les erreurs comme je lui ai dis...

Re: Erreur requête MySQL

Posté : 15 nov. 2010, 14:51
par pierreC

ca l'aide pas non plus t'en qu'il a pas activer les erreurs comme je lui ai dis...
Mais l'erreur ne viens pas de PDO, l'erreur vient de PHP lui même, l'utilisation d'un objet qui n'existe pas. En quoi l'affichage des erreurs PDO pourrait t'il être utile étant donnée que PDO n'est même pas appelé :roll:

Re: Erreur requête MySQL

Posté : 15 nov. 2010, 14:55
par stealth35

ca l'aide pas non plus t'en qu'il a pas activer les erreurs comme je lui ai dis...
Mais l'erreur ne viens pas de PDO, l'erreur vient de PHP lui même, l'utilisation d'un objet qui n'existe pas. En quoi l'affichage des erreurs PDO pourrait t'il être utile étant donnée que PDO n'est même pas appelé :roll:
si la requete ne fonctionne pas PDO renvoie false a la place d'un PDOStatement, sauf que lui ne sais pas qu'il renvoie false puisqu'il na pas activé les erreurs.

Re: Erreur requête MySQL

Posté : 17 nov. 2010, 21:22
par voblivion
Un grand merci pour vos réponses ..

J'ajouterais donc:
>> J'ai beau eu cherché, je n'ais pas trouvé comment activer les erreurs u-u
>>remplacer req par bdd n'a rien changé ..
Je continu donc à chercher .. si vous avez d'autres idées ..

Re: Erreur requête MySQL

Posté : 17 nov. 2010, 21:25
par stealth35
pour les erreurs je t'ai mis le lien

Re: Erreur requête MySQL

Posté : 17 nov. 2010, 22:00
par moogli
salut,

dans le même sens ajoute un test sur $req
<?php
if ( $req === false) {
$err = $dbh->errorInfo();
echo $err(2];// <= message d'erreur
}
?> 

Re: Erreur requête MySQL

Posté : 19 nov. 2010, 16:42
par voblivion
Jai bien lu la partie appropriée à mon problème, à savoir celle-ci:
Extension : PDO

Gestion des erreurs avec l'attribut PDO::ATTR_ERRMODE

Options : PDO::ERRMODE_SILENT, PDO::ERRMODE_WARNING, PDO::ERRMODE_EXCEPTION
Défaut : PDO::ERRMODE_SILENT
Recommandé : PDO::ERRMODE_WARNING
Mais je ne sais pas ni comment ni où changer ERRMODE_SILENT (par défaut) en ERRMODE_WARNING ou EXCEPTION.

..

Je continu de chercher .. en fait j'ai basé mon code sur les exemples du siteduzéro .. c'est peut-être pour ça que je n'ai pas réussi à faire fonctionner $req. De ce que j'ai appris, c'est la variable créé pour contenir les données organisées grace à "execute" et provenants de $rep ..

Si jamais vous sauriez comment faire, auriez vous un code "type" qui permettrais de récupérer une colonne d'une table et de vérifier que le champs entré par l'utilisateur n'est jamais égal à l'une de ces colonnes ?

Re: Erreur requête MySQL

Posté : 19 nov. 2010, 16:55
par moogli
yop

je suppose que tu parle de http://www.siteduzero.com/tutoriel-3-34 ... x-bdd.html ?
exemple de connexion au sgbd :
/!\ Attention tu doit modifier les infos de connexion PDO pour que cela correspondent à ton SGBD (utilisateur, mdp, host )etc
try {
    $dbh = new PDO("pgsql:dbname=test_base;host=192.168.56.101", 'postgres', md5('tipounet'));
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); //affichage des erreurs
} catch (Exception $e) {
    echo 'Erreur : ' . $e->getMessage() . '<br />';
    echo 'N° : ' . $e->getCode();
}
pour les requêtes c'est indiqué dans le 1er lien.

pour savoir si une valeur existe dans une colonne (par exemple)

select count(clefprimaire) as nb from table where champ='valeur entrée par l utilisateur';

le résultat de la requête de fournira (avec l'exemple du sdz) $data->nb qui contiendra le nombre de fois que tu a l'info fournit par l'utilisateur. si == 0 ta condition est vrai si non rejet !

@+