SQL Syntax error, d'accord, mais où ??
Résolu
Kopros
Messages postés
595
Date d'inscription
Statut
Membre
Dernière intervention
-
Kopros Messages postés 595 Date d'inscription Statut Membre Dernière intervention -
Kopros Messages postés 595 Date d'inscription Statut Membre Dernière intervention -
Salut,
Je suis présentement en train de m'arracher les cheveux sur une erreur SQL, et je vous pose la question avant d'être totalement chauve !
Je pense que l'erreur viens du format date. Voilà la requête en question :
Si je copie ça dans phpmyadmin la requête s'exécute sans problème.
Mais quand j'essaie de la faire en php avec mysql_query j'ai l'erreur :
Le type de champs de date_cmd et date_retrait est "date" (pas de datetime).
J'ai testé de mettre des simples et doubles quotes, les quotes chelou (celles de la touche 7), sans quote du tout (en désespoir de cause)... et j'ai toujours cette erreur à la c..
J'ai bien vérifié le format de la date (YYYY-mm-dd).
Je sais plus trop quoi tester... Si vous avez une idée je suis preneur !
Je suis présentement en train de m'arracher les cheveux sur une erreur SQL, et je vous pose la question avant d'être totalement chauve !
Je pense que l'erreur viens du format date. Voilà la requête en question :
INSERT INTO commandes ('id_account','date_cmd','date_retrait','prix_cmd','statut') VALUES (2,'2013-08-08','2013-08-21',"10 €",1);
Si je copie ça dans phpmyadmin la requête s'exécute sans problème.
Mais quand j'essaie de la faire en php avec mysql_query j'ai l'erreur :
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 '('id_account','date_cmd','date_retrait','prix_cmd','statut') VALUES (2,'2013-08-' at line 1
Le type de champs de date_cmd et date_retrait est "date" (pas de datetime).
J'ai testé de mettre des simples et doubles quotes, les quotes chelou (celles de la touche 7), sans quote du tout (en désespoir de cause)... et j'ai toujours cette erreur à la c..
J'ai bien vérifié le format de la date (YYYY-mm-dd).
Je sais plus trop quoi tester... Si vous avez une idée je suis preneur !
A voir également:
- SQL Syntax error, d'accord, mais où ??
- Cmos checksum error ✓ - Forum Carte-mère/mémoire
- Playback error reconnect in 3s (1/5) francais - Forum Box et Streaming vidéo
- Whea error occt - Forum Processeur
- Error 1962 ✓ - Forum PC fixe
- A javascript error occurred in the main process - Forum Matériel & Système
3 réponses
Bonjour
Je ne crois pas que ça vienne de la date, l'erreur est détectée dès la parenthèse.
Pour les quotes, il n'y a pas à essayer quoi que ce soit :
Il ne faut pas de quotes autour des noms de tables ou champs, ou alors seulement des "quotes chelou" comme tu dis.
Par contre, il en faut autour des données (VALUES) non numériques.
Si son met des apostrophes simples (du 4) autour des noms de champs, on obtient, on obtient presque ton erreur, mais sans la parenthèse.
Enlève les quotes autour des noms de champs et l'espace avant la parenthèse.
Je ne crois pas que ça vienne de la date, l'erreur est détectée dès la parenthèse.
Pour les quotes, il n'y a pas à essayer quoi que ce soit :
Il ne faut pas de quotes autour des noms de tables ou champs, ou alors seulement des "quotes chelou" comme tu dis.
Par contre, il en faut autour des données (VALUES) non numériques.
Si son met des apostrophes simples (du 4) autour des noms de champs, on obtient, on obtient presque ton erreur, mais sans la parenthèse.
Enlève les quotes autour des noms de champs et l'espace avant la parenthèse.
Elle est faite dans une fonction d'une class que j'ai faite pour traiter toutes les requêtes SQL très simplement dans le code.
Voici cette fonction :
Voilà, la fonction chk_value s'occupe notamment de renvoyer la valeur avec les quotes.
Cette fonction a toujours bien marché, sauf là ^^
PS : sur CCM, les quotes de la touche 7 sont remplacées par les simples quotes (de la touche 4)
Voici cette fonction :
public function mysql_insert($table,$values,$primary_key='',$primary_key_force=false){ $field_names=$this->get_mysql_fields($table); $primary_key=(strlen($primary_key)==0)?$field_names[0]:$primary_key; $fields=''; $vals=''; if(array_key_exists(0,$values)){ foreach($field_names as $f){if ($f!=$primary_key||$primary_key_force)$fields.='''.$f.'',';} foreach($values as $v){$vals.=$this->chk_value($v).',';} } else{ foreach($field_names as $f){ if ($f!=$primary_key||$primary_key_force){ $fields.='''.$f.'','; $vals.=$this->chk_value($values[$f]).','; } } } $fields=substr($fields,0,-1); // On enlève les dernières virgules $vals=substr($vals,0,-1); mysql_query('INSERT INTO '.$table.' ('.$fields.') VALUES ('.$vals.');') or die ('Erreur lors de l\'enregistrement.<br/>'.mysql_error()); return mysql_insert_id(); }
Voilà, la fonction chk_value s'occupe notamment de renvoyer la valeur avec les quotes.
Cette fonction a toujours bien marché, sauf là ^^
PS : sur CCM, les quotes de la touche 7 sont remplacées par les simples quotes (de la touche 4)
Comme tu le pensais l'erreur ne venait pas de la date, ni des quotes.
Les quotes de la touche 7 (désolé je ne sais pas comment elles s'appellent) sont bien celles que je mets autour des noms des champs. CCM les interprète comme des quotes simples standard.
L'erreur en question venait du fait que je passe par une fonction que j'ai faite pour tous les traitement SQL.
J'avais mis à jour cette fonction, en changeant l'ordre des paramètres.
Sauf que j'ai oublié de mettre à jour à l'appel, et en fait le nom de la table était mal renseigné.
Voilà, comme dans beaucoup de cas, l'erreur se situait donc entre la chaise et l'écran !