[RESOLU] Erreur SQL SYNTAX

Mammouth du PHP | 19672 Messages

25 févr. 2006, 16:30

le dernier post de qui ?
Le tiens : regarde tes concaténations: il n'y en a aucune et tu rajoutes des points qui ne servent à rien qu'à allonger la chaine.

Dom!, regarde soigneusement la syntaxe que j'ai utilisé à ce propos

Prennez l'habitude de séparer le PHP des autres langages qui doivent être traités comme des chaines de caractère.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 424 Messages

25 févr. 2006, 16:33

Je regarde ca Cyrano mais j'ai mis ta requete et j'ai toujours une erreur, je vais regarder ca de pret
Youpi Youpi Yo !

Eléphant du PHP | 424 Messages

25 févr. 2006, 16:37

Le tien HD :D
Youpi Youpi Yo !

Eléphant du PHP | 424 Messages

25 févr. 2006, 16:43

J'ai cette erreur qui revient !

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 ' list_id_entraineur = 24,54, sexe

Je ne comprend pas... j'ai bien regardé ton code cyrano mais ca ne fonctionne pas...
Pourriez vous m'expliquer quelle est la différence entre :

photo_g = '". $photo_g ."' et

photo_g = '. $photo_g .'

Merci
Youpi Youpi Yo !

Mammouth du PHP | 19672 Messages

25 févr. 2006, 17:03

BOn, explications sur la concaténation et règles SQL.

Quand on insère une chaine de caractères dans tu PHP, on l'encadre avec des guillemets :
$variable = "chaine de caractères";
Si on veut ajouter un élément variables PHP dans la chaine de caractère, il est préférable de faire une concaténation en séparant proprement la chaine du PHP:
$variable = "Chaine contenant un ". $element_variable ." qui peut être modifié";
En SQL, quand on affecte une valeur à une colonne, il faut distinguer les champs numériques des autres types de champs. Les champs non numériques doivent être protégés par des apostrophes. Je vais revenir plus loin sur les apostrophes/guillemets.

Code : Tout sélectionner

UPDATE matable SET champ_num = 123, champ_txt = 'valeur'
Maintenant, on mixe un peu tout ça : on crée une requête qui va contenir des variables PHP. La requête doit être traitée par PHP comme une chaine de caractères :
$sql = "UPDATE matable SET champ_num = 123, champ_txt = 'valeur'";
Maintenant, on va insérer des valeurs variables PHP à la place des valeurs en dur :
$sql = "UPDATE matable SET champ_num = ". $val_123 .", champ_txt = '". $valeur_txt ."'";
J'utilise personnellement des guillemets en PHP et des apostrophes en SQL : on peut inverser, ça n'a pas une importance capitale: en revanche, il est indispensable d'éviter les conflits. Je pourrais utiliser des apostrophes partout, mais dans ce cas, certaines apostrophes sont du PHP, d'autres font partie de la chaine de caractères, je dois donc échapper celles de la chaine:
$sql = 'UPDATE matable SET champ_num = '. $val_123 .', champ_txt = \''. $valeur_txt .'\'';

Est-ce que c'est plus clair comme ça ? Adapte ton code maintenant.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 424 Messages

26 févr. 2006, 12:02

Je reviens vers vous car ca ne fonctione pas j'ai essayé toute les possibilitées, je me suis basé sur tes explications Cyrano mais j'ai toujours cette erreur de syntaxe...

Je desespere ! :cry:
Youpi Youpi Yo !

Avatar du membre
ViPHP
ViPHP | 3008 Messages

26 févr. 2006, 12:17

$sql_ajout = "update tb_equipes set id_age=".$age.", id_categorie=".$categorie.", list_id_entraineur ='".$temp."', sexe=".$section.", liste_id_joueur ='".$temp2."', liste_id_dirigeant ='".$temp1."', numero =".$numero.", nom ='".$nom."', abreviation ='".$abreviation."', photo_p ='".$photo_p."', photo_g ='".$photo_g."' where id_equipe = ".$id;
Sexe est une chaîne de caractères ou un numérique ? Dès que c'est un numérique tu enlèves les ' qui entourent la variable.

Eléphant du PHP | 424 Messages

26 févr. 2006, 12:27

Voici l'erreur qui me sort par les yeux :

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 ' list_id_entraineur ='24,54', sexe=, liste_id_joueur ='97,124,9

sexe a comme valeur : soit 1 soit 2 j'ai donc pas mis les ' !!!
Youpi Youpi Yo !

Avatar du membre
ViPHP
ViPHP | 3008 Messages

26 févr. 2006, 12:32

Pour bien repérer le problème, exécutes ta requête directement avec de vraies valeurs sous phpMyAdmin. Là tu verras tout de suite d'où vient le souci.

Une fois que ta requête fonctionne sous phpMyAdmin, il te suffira de les retranscrire avec les variables.

Mammouth du PHP | 19672 Messages

26 févr. 2006, 12:34

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 ' list_id_entraineur ='24,54', sexe=, liste_id_joueur ='97,124,9
Regarde bien la chaine ilustrée dans le message d'erreur, j'ai mis en rouge le point à problème : sexe n'a pas de valeur du tout, on saut à la virgule, or le serveur attendait une valeur, donc ne la trouvant pas il te jette.

Ça signifie que tu as une variable qui n'est pas correctement initialisée.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 424 Messages

26 févr. 2006, 12:58

Ok effectivement tu as raison Cyrano j'ai donc réctifié l'erreur mais j'ai quand meme ce message :

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 ' list_id_entraineur ="24,54", sexe=0, liste_id_joueur ="97,124,

Maintenant dans phpmyadmin j'ai une erreur à la ligne 1 !!!! mais la ligne 1 c'est la 1er ligne de ma page ou la 1ere ligne de ma requete ?

Merci pour votre aide précieuse
Youpi Youpi Yo !

Mammouth du PHP | 19672 Messages

26 févr. 2006, 12:59

C'est la ligne de la requête, comme elle est écrite sur une seule ligne, ça ne t'indique pas grand chose d'utilisable.

Fais afficher la requête générée et colle nous ça ici.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 424 Messages

26 févr. 2006, 13:04

JE ne sais pas si c'est ca que tu souhaites ?! :

Array
(
[id] => 32
[nom] => SENIORS 2 FILLES
[abreviation] => PESF
[photo_p] => http://www.cagnesbasket.com/modules/Gal ... petite.jpg
[photo_g] =>
[categorie] => 3
[age] => 8
[numero] => 2
[section] => 0
[entrain_out] => Array
(
[0] => 24
[1] => 54
)

[dir_out] => Array
(
[0] => 35
[1] => 36
)

[joueur_out] => Array
(
[0] => 97
[1] => 124
[2] => 91
[3] => 95
[4] => 90
[5] => 67
[6] => 87
[7] => 96
[8] => 88
[9] => 92
)

[Submit] => Modifier equipe
)


Sinon dis le moi ! merciii
Youpi Youpi Yo !

Mammouth du PHP | 19672 Messages

26 févr. 2006, 13:18

non, la requête SQL :
echo($requete);
Ou quelque chose comme ça.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 424 Messages

26 févr. 2006, 13:20

Voici ce que sa m'affiche :

update tb_equipes set id_age=8, id_categorie=, list_id_entraineur ='24,54', sexe=0, liste_id_joueur ='97,124,91,95,90,67,87,96,88,92', liste_id_dirigeant ='35,36', numero =2, nom ='SENIORS 2 FILLES', abreviation ='PESF', photo_p ='http://www.cagnesbasket.com/modules/Gal ... petite.jpg', photo_g ='' where id_equipe = 32

Merci pour ton aide
Youpi Youpi Yo !