8791 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai des erreurs MySQL (aucun problème côté PHP) que je n'arrive pas à comprendre. Voici ce qu'il m'est retourné quand j'essaie de faire une simple modification :

UPDATE vouchers SET voucher_content = 'test', voucher_start = '2010-09-15', voucher_end = '2010-09-29' WHERE voucher_id = '1'
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 '= 'test', voucher_start = '2010-09-15', voucher_end = '2010-09-29' WHERE vouche' at line 1

Le code PHP :

$query = "UPDATE vouchers SET voucher_content = '".$voucher_content."', voucher_start = '".$voucher_start."',  voucher_end = '".$voucher_end."' WHERE voucher_id = '".$voucher_id."'";
        $res = $this -> query($query);


La fonction dans la classe parente :

        echo $query."<br/>";
        $result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
        
        if ($result){ return true; }
        else { return false; }


Voilà, si quelqu'un pourrait m'aiguiller pour que je puisse me sortir de cette erreur qui ne veut apparemment rien dire, je lui en serait très reconnaissant !

Bonne journée !
Modifié par Korangar (12 Oct 2010 - 12:41)
Salut, si tes variables sont des chiffres utilise uniquement '$variable' ça évite de confondre avec une chaine de caractère (pas obligatoire).
Ensuite protège tes champs comme ceci:

$requete = "     UPDATE  `vouchers` 
                 SET     `voucher_content` = '".$voucher_content."', 
                         `voucher_start` = '".$voucher_start."',
                         `voucher_end` = '".$voucher_end."' 
                 WHERE   `voucher_id` = '".$voucher_id."'
           "; 

$result_requete = mysql_query($requete);

Ce genre de requête marche en procédural chez moi, en objet je ne sais pas par contre, mais il ne devrait pas y avoir de problèmes.
Cordialement.
Salut,

Merci pour ton message Smiley smile Malheureusement rajouter des apostrophes n'a pas arrangé les choses. Le message d'erreur ne pointe plus sur la même partie de requête :

UPDATE 'vouchers' SET 'voucher_content' = 'Bon longue durée pour la balade guidée de Ménilmontant à Belleville !!!!', 'voucher_start' = '2010-09-15', 'voucher_end' = '2010-09-29' WHERE 'voucher_id' = '1'
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 ''vouchers' SET 'voucher_content' = 'Bon longue durée pour la balade guidée de' at line 1

J'ai aussi oublié de préciser que si je copie-colle la requête que j'affiche directement dans phpadmin, il n'y a aucun soucis (à part quand je met les apostrophes comme tu me l'as conseillé, dans ce cas phpadmin me retourne la même erreur).
Modifié par Korangar (05 Oct 2010 - 10:28)
Essais d'échapper tes données avec la fonction mysql_real_escape_string(). Si tes textes contiennent un caractère utilisé par SQL tel que l'apostrophe tu risques de tomber sur ce genre d'erreur.
Salut,
Korangar a écrit :
rajouter des apostrophes

Il ne s'agit pas d'apostrophe mais d'accent grave (Alt Gr + 7 sur les claviers français).
Bonjour à vous !

Donc j'ai essayé les deux méthodes, ce qui me donne au final :

$query = "	
UPDATE `vouchers` 
SET 	      `voucher_content` = '".mysql_real_escape_string($voucher_content)."', 
	      `voucher_start` = '".mysql_real_escape_string($voucher_start)."', 
	      `voucher_end` = '".mysql_real_escape_string($voucher_end)."' 
WHERE  `voucher_id` = '".mysql_real_escape_string($voucher_id)."'";



Et toujours la même erreur :

UPDATE `vouchers` SET `voucher_content` = 'test', `voucher_start` = '2010-09-15', `voucher_end` = '2010-09-29', WHERE `voucher_id` = '1'
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 'voucher_content` = 'test', `voucher_start` = '2010-09-15', `voucher_' at line 2

On dirait qu'il bug dès qu'il rencontre un caractère ASCII après le SET. D'autres pistes ?
Modifié par Korangar (06 Oct 2010 - 10:21)
Salut,

pourrais tu nous donner le résultat de
echo $query
, et essayer de supprimer tous les caractères qui pourrait être parasites? sauts de ligne, tabulation, espaces multiples, et t'assurer qu'il n'y a pas un espace quelque part dans un des noms de champs de la structure de ta table (ça m'est déjà arrivé ce genre de choses c'est a s'arracher les cheveux)

@+
Je crois avoir découvert le fin mot de l'histoire... Smiley sweatdrop

Apparament sur mon éditeur de texte Komodo Edit (je sais pas si c'est partout pareil), les espaces et les shift+espaces ne sont pas interprétés de la même façon... En écrivant mes requêtes, j'appuie naturellement sur shift pour écrire mes mots-clés en majuscules, et donc il m'arrive de faire des shift + espaces, ce qui marque bien des espaces.

Cependant, en affichant concrètement les espaces dans l'éditeur (représentés par un point), je me suis aperçu qu'il n y avait pas de points à certains espaces comme entre INSERT et INTO par exemple... Et apparament en envoyant la requête à MySQL, ce dernier considérait donc qu'il n y avait pas d'espaces et comprennait pas mes requêtes... Pourtant en affichant la requête, il y avait bien des espaces !!

Le "bug" qui rend fou par excellence... Quelqu'un pourrait m'expliquer la différence entre un espace et un "espace majuscule" ? Smiley confus Parce que un bug de ce genre, je veux plus jamais en avoir.
Il n'y a pas de différence, il faut regarder du côté de ton éditeur, savoir quel caractère il met quand tu fais un espace en majuscule. Je pencherais pour un espace insécable, mais ça reste à vérifier.
Oui apparament ça vient de mon éditeur, mais j'ai pas trouvé l'option. Enfin bon, merci tout de même de m'avoir aiguillé Smiley smile Je sais à quoi m'attendre maintenant !