SQL Syntax error, d'accord, mais où ??

Résolu/Fermé
Kopros Messages postés 597 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 - Modifié par Kopros le 8/08/2013 à 15:22
Kopros Messages postés 597 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 - 20 août 2013 à 18:26
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
8 août 2013 à 15:59
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 597 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 89
20 août 2013 à 18:26
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 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
8 août 2013 à 15:23
Salut,

tu construits ta requête comment ?
0
Kopros Messages postés 597 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 89
Modifié par Kopros le 8/08/2013 à 16:00
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