IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Syntaxe de INSERT INTO [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2013
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Syntaxe de INSERT INTO
    Bonjour,

    après des heures de vaines recherches je viens me tourner vers vous pour un petit problème :

    Je voudrais insérer des données dans une table "perso", mais impossible de faire marcher correctement ma requête SQL,
    dont voilà le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query="insert into perso (email,pseudo,sexe,race,classe,pass,confpass,statut,xp,level,levelup,force,dex,mana,intel,sag,char) values ('$email','$pseudo','$sexe','$race','$classe','$pass','$confpass','$statut','$xp','$level','$levelup',$force,$dex,$mana,$intel,$sag,$char)";
    $result=mysql_query ($query) die('Erreur : '.$e->getMessage());
    Les champs

    Le message d'erreur que j'obtiens est le suivant :

    Parse error: syntax error, unexpected T_EXIT in E:\monchemin\nouveau_perso.php
    J'ai essayé avec et sans les apostrophes, j'obtiens le même résultat. Et je ne sais pas trop ce que le T_EXIT signifie.

    Merci d'avance pour votre aide

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 314
    Points : 217
    Points
    217
    Par défaut
    tu as une erreur de syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result=mysql_query ($query) die('Erreur : '.$e->getMessage());
    essaye de faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(mysql_query($query) ){
    $result = mysql_query($query);
    }else{
    die('Erreur : '.$e->getMessage());
    }
    ou sur une seule ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     // si la requête est bien exécutée tu tu affecte la variabale $result sinon tu arrête le script
    ( mysql_query ($query) ) ? $result=mysql_query ($query) :  die('Erreur : '.$e->getMessage());

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2013
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci de ta réponse rapide !

    J'ai essayé ton code mais j'ai un nouveau message d'erreur :

    Fatal error: Call to a member function getMessage() on a non-object

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2013
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Et quand j'essaye avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(mysql_query($query) ){
    $result = mysql_query($query);
    }else{
    die (mysql_error ());
    }
    j'obtiens :

    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 'force,dex,mana,intel,sag,char) values ('julien.paris3@hotmail.fr','mec','Homme',' at line 1

  5. #5
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 314
    Points : 217
    Points
    217
    Par défaut
    pour l'erreur :
    Fatal error: Call to a member function getMessage() on a non-object
    $e n'est un objet , il faut crée une instance de la classe PDO , en plus pourquoi tu utilise PDO et l'extension mysql ?

    pour 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 'force,dex,mana,intel,sag,char) values ('julien.paris3@hotmail.fr','mec','Homme',' at line 1
    c'est une erreur de syntaxe , vérifier bien les apostrophes

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2013
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Oui en effet j'ai enlevé le PDO du MySQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = "insert into perso (email,pseudo,sexe,race,classe,pass,confpass,statut,xp,level,levelup,force,dex,mana,intel,sag,char) values ('$email','$pseudo','$sexe','$race','$classe','$pass','$confpass','$statut','$xp','$level','$levelup','$force','$dex','$mana','$intel','$sag','$char')";
    $result = mysql_query($query) or die (mysql_error ());
    Mais j'ai toujours cette 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 'force,dex,mana,intel,sag,char) values ('julien.paris3@hotmail.fr','a','Homme','H' at line 1
    J'ai beau chercher je ne vois pas d'erreur d'apostrophe. Il y en a sûrement un qui traine par là...

    Merci de ton aide en tout cas

  7. #7
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 314
    Points : 217
    Points
    217
    Par défaut
    essaye ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query = "insert into perso (email,pseudo,sexe,race,classe,pass,confpass,statut,xp,level,levelup,force,dex,mana,intel,sag,char)"
            . " values "
            . "('".$email."','".$pseudo."','".$sexe."','".$race."','".$classe."','".$pass."','".$confpass."','".$statut."','".$xp."','".$level."','".$levelup."','".$force."',
    		'".$dex."','".$mana."','".$intel."','".$sag."','".$char."')";

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2013
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    J'ai toujours la même erreur, je pense qu'on est face à un mystère :p

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    et comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    $esc = function($p) { return "'".mysql_real_escape_string($p)."'"; };
     
    $data = array(
        'email'    => $email,
        'pseudo'   => $pseudo,
        'sexe'     => $sexe,
        'race'     => $race,
        'classe'   => $classe,
        'pass'     => $pass,
        'confpass' => $confpass,
        'statut'   => $statut,
        'xp'       => $xp,
        'level'    => $level,
        'levelup'  => $levelup,
        'force'    => $force,
        'dex'      => $dex,
        'mana'     => $mana,
        'intel'    => $intel,
        'sag'      => $sag,
        'char'     => $char
    );
     
    $escaped = array_map($esc, $data);
    $sql     = 'INSERT INTO perso ('.implode(', ', array_keys($escaped)).') VALUES ('.implode(', ', $escaped).')';
    Il faut toujours penser à échapper les valeurs.
    Par ailleurs, toute la lib mysql_xxx va être abandonnée par PHP, il faut passer soit à mysqli soit à PDO.

  10. #10
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Le problème en l’occurrence, c'est plutôt le nom des colonnes : FORCE est un mot réservé pour MySQL. Si tu l'utilises comme nom de colonne, il faut le mettre entre backquotes. (j'ai pas vérifié les autres colonnes)

    Donc en adaptant le code de rawsrc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    $esc = function($p) { return "'".mysql_real_escape_string($p)."'"; };
     
    $data = array(
        'email'    => $email,
        'pseudo'   => $pseudo,
        'sexe'     => $sexe,
        'race'     => $race,
        'classe'   => $classe,
        'pass'     => $pass,
        'confpass' => $confpass,
        'statut'   => $statut,
        'xp'       => $xp,
        'level'    => $level,
        'levelup'  => $levelup,
        'force'    => $force,
        'dex'      => $dex,
        'mana'     => $mana,
        'intel'    => $intel,
        'sag'      => $sag,
        'char'     => $char
    );
     
    $escaped = array_map($esc, $data);
    $sql     = 'INSERT INTO perso (`'.implode('`, `', array_keys($escaped)).'`) VALUES ('.implode(', ', $escaped).')';
    EDIT : Rendons à Césarrawsrc ce qu'il lui appartient
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  11. #11
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par Celira Voir le message
    Le problème en l’occurrence, c'est plutôt le nom des colonnes : FORCE est un mot réservé pour MySQL. Si tu l'utilises comme nom de colonne, il faut le mettre entre backquotes. (j'ai pas vérifié les autres colonnes)

    Donc en adaptant le code de sabotage :
    Bien vu pour le mot réservé MySQL FORCE par contre de mon côté j'avais réservé le mot clé rawsrc et aux dernières nouvelles les mots clés sabotage et rawsrc n'avaient pas encore fusionné pour devenir équivalents

    P'têt comme ça : `sabotage`, non y a rien à faire c'est toujours différent de `rawsrc` ;-)

  12. #12
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Bien vu pour le mot réservé MySQL FORCE par contre de mon côté j'avais réservé le mot clé rawsrc et aux dernières nouvelles les mots clés sabotage et rawsrc n'avaient pas encore fusionné pour devenir équivalents

    P'têt comme ça : `sabotage`, non y a rien à faire c'est toujours différent de `rawsrc` ;-)
    Oups ! Désolationnée très beaucoup ! (le pire, c'est que je suis sûre d'avoir vérifié... J'ai pas dû regarder le bon thread )
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2013
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Ahhhhhhh merci beaucoup à vous !!!
    Celira a raison, le nom de la colonne posait problème.

    J'ai remarqué également que "char" était réservé, j'ai donc modifié le nom de mes deux colonnes et tout marche correctement.

    Je vous remercie grandement de votre aide précieuse !

    Pour Mysqli j'avais déjà tapé toutes mes requêtes comme ça, mais impossible de les faire fonctionner, j'avais cette erreur :
    Fatal error: Call to undefined function mysqli() in
    Je suis donc passé à mysql tout court. Mais ceci est un autre problème et je posterai un nouveau sujet au bon endroit

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. pb de syntaxe requête INSERT INTO
    Par emulamateur dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 14/06/2011, 12h55
  2. Erreur de syntaxe dans INSERT INTO
    Par nanar21 dans le forum VB.NET
    Réponses: 1
    Dernier message: 25/02/2010, 22h36
  3. erreur syntaxe sur insert into (date)
    Par jpclutier dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/05/2009, 10h02
  4. syntaxe commande INSERT INTO
    Par hottnikks_79 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2006, 13h52
  5. Erreur de syntaxe dans INSERT INTO VALUES
    Par Mariboo dans le forum Access
    Réponses: 4
    Dernier message: 25/05/2006, 18h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo