[RESOLU] Erreur SQL SYNTAX

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Erreur SQL SYNTAX

par Dom! » 26 févr. 2006, 13:40

Je vais me jeter par la fenetre mais avant je vais quand meme te remercier Cyrano ! :lol:

Je suis dégouté et en meme temps content que ca fonctionne... la prochaine fois je saurais qu'il faut afficher la requete puis la mettre dans le bloc note pour étudier l'erreur. :roll:

MErci encore :D

par Cyrano » 26 févr. 2006, 13:35

Ok, méthode pour débugguer ça : tu aurais vu immédiatement l'erreur en le faisant: colle ça dans un bloc note et fais quelques retours de ligne pour rendre ça plus facilement lisible, ça donne ceci:

Code : Tout sélectionner

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/Gallery/images/photos_equipes/pesf_equipe_petite.jpg', photo_g ='' WHERE id_equipe = 32;
Je te laisse observer, tu devrais voir l'erreur toi-même.

par Dom! » 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

par Cyrano » 26 févr. 2006, 13:18

non, la requête SQL :
echo($requete);
Ou quelque chose comme ça.

par Dom! » 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

par Cyrano » 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.

par Dom! » 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

par Cyrano » 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.

par charabia » 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.

par Dom! » 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 ' !!!

par charabia » 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.

par Dom! » 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:

par Cyrano » 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.

par Dom! » 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

par Dom! » 25 févr. 2006, 16:37

Le tien HD :D