Page 1 sur 1

Erreur SQL sur le web, mais pas dans PHPMyAdmin

Posté : 12 janv. 2008, 03:55
par VaN
Bonsoir,

un problème peu commun se pose à moi.

Lors d'un UPDATE de table, ma page web me renvoie une erreur assez commune, à savoir :

Code : Tout sélectionner

Erreur de syntaxe pr�s de 'WHERE user_mail = '[email protected]'' � la ligne 1
Je vais donc tester dans PHPMyAdmin, et là, stupeur, la requête est parfaitement comprise, et interprétée.

Voici la requete qui pose problème :
$sql = sprintf("UPDATE ".$prefixe."users SET user_pass = '".md5($newPass)."' WHERE user_mail = '%s'", 
mysql_real_escape_string($mail));
ce qui donne :

Code : Tout sélectionner

UPDATE users SET user_pass = '83af51ded532f53346a6270ad34d3c5e' WHERE user_mail = '[email protected]'
Et la structure de la table :

Code : Tout sélectionner

CREATE TABLE `users` ( `user_id` int(11) NOT NULL auto_increment, `user_login` text character set latin1 collate latin1_general_cs NOT NULL, `user_pass` text character set latin1 collate latin1_general_cs NOT NULL, `user_mail` text NOT NULL, `user_level` tinyint(4) NOT NULL, `user_activated` tinyint(4) NOT NULL, `user_activation_key` text character set latin1 collate latin1_general_cs NOT NULL, PRIMARY KEY (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
Comment se fait-il que ma requête passe sous PHPMyAdmin, mais pas sur le web ?

Merci d'avance.

Posté : 12 janv. 2008, 11:07
par zeus
Cette requête ne fonctionne jamais dans ton script ?

Est-ce que la requête que tu nous montres a fonctionnée correctement ou est-ce qu'elle a plantée aussi en prod ?

Posté : 12 janv. 2008, 16:48
par VaN
Cette requête ne fonctionne jamais dans ton script ?

Est-ce que la requête que tu nous montres a fonctionnée correctement ou est-ce qu'elle a plantée aussi en prod ?
Je ne comprends pas bien la question. C'est le seul endroit où j'utilise cett requête (c'est le script qui permet de renouveller un password, lorsque celui-ci a été égaré.)

Je reçois ce msg d'erreur aussi bien sur serveur local que sur serveur distant.

Posté : 12 janv. 2008, 17:58
par zeus
En fait, vu que la requête que tu nous montres semble valide, je me demande si l'erreur n'est pas due à une variable spécifique.

De plus, comme tu nous dit que cette requête marche dans PhpMyAdmin, je me demandais si l'exécution de cette requête via le script avait fonctionnée

Posté : 13 janv. 2008, 20:55
par VaN
Bin nan, ce msg d'erreur apparait sur le web, et uniquement sur le web (donc quand la totalité du script est lancé), et ce, dès sa première utilisation.

Posté : 13 janv. 2008, 22:48
par Hubert Roksor
À tout hasard, fais un
echo bin2hex($sql);
...pour qu'on voit de quoi est faite ta requête exactement telle qu'elle est exécutée. Ne l'édite sous aucun prétexte. (à toi d'effectuer la requête avec une adresse email invalide si tu ne veux pas la publier)

Tant que tu y es, exécute cette requête dans ton script et dans phpMyAdmin et copie/colle le résultat entre des balises

Code : Tout sélectionner

[code]SHOW VARIABLES

Posté : 14 janv. 2008, 00:02
par VaN
À tout hasard, fais un
echo bin2hex($sql);
...pour qu'on voit de quoi est faite ta requête exactement telle qu'elle est exécutée. Ne l'édite sous aucun prétexte. (à toi d'effectuer la requête avec une adresse email invalide si tu ne veux pas la publier)
Voilà ce qu'un bin2hex($sql) me renvoie :
53454c45435420757365725f6c6f67696e2046524f4d757365727320574845524520757365725f6d61696c203d20276c6f67696e40686f73742e636f6d27
Je ne connais pas du tout cette fonction, donc je ne sais pas du tout si c'est normal ou pas. j'imagine que oui, car le nom de la fonction me fait penser à une transformation en hexadecimal.
Tant que tu y es, exécute cette requête dans ton script et dans phpMyAdmin et copie/colle le résultat entre des balises

Code : Tout sélectionner

[code]SHOW VARIABLES
Pas bien compris ce que tu voulais que je fasses. Tu peux etre plus explicite sur ce point ?

Posté : 14 janv. 2008, 00:26
par Hubert Roksor
Je voulais que tu exécutes la requête dans phpMyAdmin pour voir les variables de ton serveur, mais oublie ça, ce sera inutile.

Ta requête est telle que suit

Code : Tout sélectionner

SELECT user_login FROMusers WHERE user_mail = '[email protected]'
Il n'y a pas d'espace entre "FROM" et "users", donc la chaine "FROMuser" est considérée comme un alias, comme si tu avais utilisé

Code : Tout sélectionner

SELECT user_login AS FROMusers WHERE user_mail = '[email protected]'
Tout simplement, ta requête ne contient pas de clause FROM et MySQL s'étonne donc d'y trouver un WHERE. D'ailleurs, je viens de m'apercevoir que ce n'était pas du tout la même requête que dans ton premier post.

Posté : 14 janv. 2008, 01:37
par VaN
Rah, effectivement.

j'utilise un prefixe pour mes tables sur le serveur distant (une seule db autorisé par mon hebergeur), d'où le
FROM ".$prefixe."users
qui en fait, était un
FROM".$prefixe."users
. Et j'ai deux requetes, l'une en dessous de l'autre, je n'ai pas fait attention à laquelle des deux renvoyait cette erreur. Je me demande encore comment j'ai pu passer à coté de ça..

En tout cas, merci.