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   -
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 :
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 !

3 réponses

Utilisateur anonyme
 
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.
1
Kopros Messages postés 595 Date d'inscription   Statut Membre Dernière intervention   89
 
Salut et merci pour ta réponse.

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 !
0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
Salut,

tu construits ta requête comment ?
0
Kopros Messages postés 595 Date d'inscription   Statut Membre Dernière intervention   89
 
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 :

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)
0