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 :

Erreur de syntaxe pour MySQL


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 51
    Points : 29
    Points
    29
    Par défaut Erreur de syntaxe pour MySQL
    Bonjour,

    Voilà j'ai une faute toute bête mais je ne vois toujours pas pourquoi cela ne fonctionne pas.

    Voila le message d'erreur

    INSERT INTO `journal` (`id_journal`,`nom`) VALUES ('','L'Express') - Erreur de syntaxe pr�s de 'Express')' � la ligne 1

    Pourtant j'utilise bien la fonction addslashes() mais cela ne change rien au problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function enregistre(){
     
         $query = "INSERT INTO `journal` (`id_journal`,`nom`) VALUES ('','".addslashes($this->nom)."')";
    		$result = mysql_query($query, $this->link) or die($query . " - " . mysql_error());
    		return $result;
     
    }
    Le champs dans la table est un VARCHARS 200 et en latin1_swedish_ci

    Sauriez-vous quel est le problème

    Merci d'avance

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Peut-être essayer mysql_real_escape_string en lieu et place de addslashes ?

  3. #3
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par php.net
    La directive PHP magic_quotes_gpc est à on par défaut, et elle appelle addslashes() sur toutes les données GET, POST et COOKIE. N'utilisez pas addslashes() sur des données déjà protégées avec magic_quotes_gpc sinon vous doublerez les protections. La fonction get_magic_quotes_gpc() est utile pour vérifier ce paramètre
    Peut-être est-ce là la source du problème ?

  4. #4
    Membre régulier Avatar de TiEuAM
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Points : 101
    Points
    101
    Par défaut
    INSERT INTO `journal` (`id_journal`,`nom`) VALUES ('','L'Express')
    'L'Express'

    Cela ne fonctionne pas car tu te retrouve avec 3 apostrophes à cet endroit, et vue qu'elles te servent de délimiteur, bin ça fou en l'air ta syntaxe sql.

    Soit tu échappes cet apostrophe contenu dans le texte (L\'Express). addslashes pourra t'aider pour ça.
    Soit tu met comme délimiteur des guillemets plutot que des apostrophes, à ta requete sql.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `journal` (`id_journal`,`nom`) VALUES ('',"L'Express")

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Effectivement J'ai essayé le addslashes() dans la fonction mais cela ne met fait rien je comprend pas

    j'ai mit addslashes($this->nom) mais sa me met toujours la même erreur.

    Pour ce qui est des guillemet j'ai essayé comme ci-dessous mais sa marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function enregistre(){
    		$query = "INSERT INTO `journal` (`id_journal`,`nom`) VALUES ('',".addslashes($this->nom).")";
    		$result = mysql_query($query, $this->link) or die($query . " - " . mysql_error());
    		return $result;
     
    	}

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    J'ai aussi essayé avec mysql_real_escape_string() fonctionne non plus pas. Avez vous d'autre solutions????

  7. #7
    Membre régulier Avatar de TiEuAM
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Points : 101
    Points
    101
    Par défaut
    arf... moi non plus pas comprendre pourquoi le addslashes ne t'échappe rien.

    essaye voir ça alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    htmlspecialchars($this->nom)
    sinon cette solution mais ce n'est pas sécurisée si le addslashes ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = "INSERT INTO `journal` (`id_journal`,`nom`) VALUES ('',\"".addslashes($this->nom)."\")";

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Merci de ton aide TiEuAM mais j'ai essayé les 2 solutions aucune d'elle ne fonctionne.

  9. #9
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    'faut débugger !

    Que donne ce code ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function enregistre(){
     
         $query = "INSERT INTO `journal` (`id_journal`,`nom`) VALUES ('','".addslashes($this->nom)."')";
        var_dump($query); exit();
    		$result = mysql_query($query, $this->link) or die($query . " - " . mysql_error());
    		return $result;
     
    }

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Voila le message que je reçois avec la function que tu ma donner jml94


    INSERT INTO `journal` (`id_journal`,`nom`) VALUES ('','L'Express') - Erreur de syntaxe pr�s de 'Express')' � la ligne 1

  11. #11
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Alors là c'est chaud, creusons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function enregistre(){
        print "<pre>";
        var_dump($this->nom);
        var_dump(addslashes($this->nom));
        $query = "INSERT INTO `journal` (`id_journal`,`nom`) VALUES ('','".addslashes($this->nom)."')";
        var_dump($query);
        exit();
    }

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Toujours la même chose . Même erreur

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Si sa peux t'aider voila un screen de la table en question.



    On voit bien qu'il arrive a ajouter tout les autres nom même ceux avec des accents et pourtant L'Express ce la ne fonctionne pas

  14. #14
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par lola13 Voir le message
    Toujours la même chose . Même erreur
    Il affiche vraiment la même erreur, y a pas d'affichage des différents var_dump à l'écran ?

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Dans le fichier lui même cela me fait exactement comment avant sans aucune information. Mais j'ai essayé votre fonction dans un autre fichier et cela me retourne cela

    string(9) "L'Express"
    string(10) "L\'Express"
    string(67) "INSERT INTO `journal` (`id_journal`,`nom`) VALUES ('','L\'Express')"

  16. #16
    Membre régulier Avatar de TiEuAM
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Points : 101
    Points
    101
    Par défaut
    Oublie le htmlspecialchars qui est une belle bétise...
    Regarde voir ce que te renvoi ça aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    echo '<pre>';
    if(function_exists('addslashes')) { echo "function_exists\r\n"; }
    if(is_callable('addslashes')) { echo "is_callable\r\n"; }
    $vartest = addslashes("L'Express");
    echo 'test: '.$vartest."\r\n";
    echo '</pre>';

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Car je contiens un Class Journal()

    Cette Class contiens les différentes function que j'effectue sur la table journal

    Comme enregistrer, supprimer, modifier, etc

    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
     
    class journal
    {
    	var $id;
    	var $nom;
    	var $link;
     
    function journal()
    	{
    		$this->link = connect_sql();
    	}
     
    function enregistre(){
    		$query = "INSERT INTO `journal` (`id_journal`,`nom`) VALUES ('','".addslashes($this->nom)."')";
    		$result = mysql_query($query, $this->link) or die($query . " - " . mysql_error());
    		return $result;
     
    	}
    Je ne vous ai pas mit toute la Class mais cela et le début

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    TiEuAM voila ce que me retourne ta fonction


    function_exists
    is_callable
    test: L\'Express

  19. #19
    Membre régulier Avatar de TiEuAM
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Points : 101
    Points
    101
    Par défaut
    Dans le fichier lui même cela me fait exactement comment avant sans aucune information. Mais j'ai essayé votre fonction dans un autre fichier et cela me retourne cela

    string(9) "L'Express"
    string(10) "L\'Express"
    string(67) "INSERT INTO `journal` (`id_journal`,`nom`) VALUES ('','L\'Express')"
    Donc si ton code original fonctionne dans un autre fichier, c'est que le code est bon, mais pas le format du fichier :

    vérifie le format de ton fichier lors de l'enregistrement avec ton éditeur, il faut un codage ANSI, ou UTF8 normal (sans BOM).

    (Enregistrer sous > Encodage:ANSI)

  20. #20
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Pour identifier l'endroit du problème, que donne ceci :

    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
     
    class journal
    {
    	var $id;
    	var $nom;
    	var $link;
     
    function journal()
    	{
    		$this->link = connect_sql();
    	}
     
    function enregistre(){
    		$query = "INSERT INTO `journal` (`id_journal`,`nom`) VALUES ('','".addslashes($this->nom)."')";
    		//$result = mysql_query($query, $this->link) or die($query . " - " . mysql_error());
    		//return $result;
                    var_dump(addslashes($this->nom));
                    return true;
     
    	}

Discussions similaires

  1. [MySQL] Erreur de syntaxe pour une mise à jour
    Par naim2009 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 29/03/2009, 03h42
  2. Réponses: 5
    Dernier message: 14/12/2006, 12h23
  3. erreur de syntaxe requete mysql
    Par LaFik dans le forum Débuter
    Réponses: 1
    Dernier message: 18/09/2006, 14h23
  4. Réponses: 4
    Dernier message: 21/07/2006, 11h00
  5. [SQL2K][BCK] erreur de syntax pour update et insert
    Par lifecraft dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/02/2006, 10h31

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