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 :

quotes dans requête ou échapement [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 69
    Points : 67
    Points
    67
    Par défaut quotes dans requête ou échapement
    Bonjour

    Après 3 jours de recherche et lecture intensive, je viens vers vous pour alléger la charge de ma recherche

    J'essaye de trouver le moyen d'envoyer une requête mais je demeure à avoir de problèmes avec les apostrophes ex "l'homme".

    Ma requête s'exécute très bien s'il n'y a pas d'apostrophe dans le champ autrement


    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 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 'affichage ' WHERE id = '81'' at line 2' in C:\wamp\www\guestvalidmodif.php:65 Stack trace: #0 C:\wamp\www\guestvalidmodif.php(65): PDOStatement->execute(Array) #1 {main} thrown in C:\wamp\www\guestvalidmodif.php on line 65
    Je sais que si la fonction mysql_connect() est utilisée alors mysql_real escape_string est de mise mais avec PDO ? Je n'ai pas saisi PDO::QUOTE

    Ci après mon code

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
     
       <?php
     
     
     
          try
           {
           $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
     
           $bdd = new PDO('mysql:host=localhost;dbname=sciencedlivror', 'root', '', $pdo_options);
           }
     
          catch (Exception $e)
           {
           die('Erreur : ' . $e->getMessage()); 
           }
     
          //récupération des valeurs des champs:
     
          $id = $_POST["id"] ;  
          $ip = $_POST["ip"] ;
          $modere = $_POST["modere"] ;
          $pseudo = $_POST["pseudo"] ;
          $mail  = $_POST["mail"] ;
          $date_message  = $_POST["date_message"] ;
          $message = $_POST["message"] ;  
     
         // Si modere est à 1 cad si on accepte le message on le met à 1 pour le copier
         // dans le bon fichier et l'afficher
     
         if ($_POST['modere'] ==1)
          {
            $req = $bdd->prepare("UPDATE t_livreortemp SET ip = '$ip', modere = '$modere', pseudo = '$pseudo',  mail = '$mail',
            date_message = '$date_message', message = '$message' WHERE id = '$id' ") ;
     
            $req->execute(array($ip,$_POST['modere'],$_POST['pseudo'],$_POST['mail'],$_POST['date_message'],$_POST['message']));
     
            if($req)  
            {
            '<br/>';
     
            //Redirection sur la page guestmoderation.php
              try
                {
                $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                //$bdd = new PDO('mysql:host=mysql51-50.perso;dbname=sciencedlivror', 'sciencedlivror', '4YwgBw7J', $pdo_options);
                $bdd = new PDO('mysql:host=localhost;dbname=sciencedlivror', 'root', '', $pdo_options);
                }
                catch (Exception $e)
                {
                die('Erreur : ' . $e->getMessage()); 
                }
     
              //Si on modifie
              if ($_POST['modere'] =="1")
                {
                $req = $bdd->prepare('INSERT INTO t_livreor (ip, modere, pseudo, mail, date_message, message)  VALUES(?, ?, ?, ?, ?, ?) ');
                $req->execute(array($_POST['ip'],$_POST['modere'],$_POST['pseudo'],$_POST['mail'],$_POST['date_message'],$_POST['message']));  
     
                //header("Location: /guestbook.php"); 
                echo("La modification à été correctement effectuée") ;
                }
            else
                {
                echo("La modification à échoué") ;
                }
            }
     
          }  
          ?>
          <meta http-equiv="refresh" content="5; URL=guestbook.php">
    Que faut-il ajouter afin que dans le champ message je puisse entrer un mot tel que - aujourd'hui - sans que l'apostrophe me mette en erreur. Je suis un peu confus d'autant que j'ai fini par solutionner les problèmes d'encodage UTF8

    Merci

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    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 'affichage ' WHERE id = '81''
    Ceci signifie que l'erreur se situe juste avant "affichage" dans la requête.

    Essaie de faire afficher la requête réellement envoyée par PDO à MySQL et qui provoque l'erreur (je ne sais plus comment on fait, ça fait un bail que je n'ai plus utilisé PDO).

    Avec PDO, tu peux utiliser PDO::quote pour faire ce que tu cherches.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 69
    Points : 67
    Points
    67
    Par défaut
    Merci CinePhil pour ta réponse.

    En effet j'aurais pu passer par mysql_connect et résoudre le problème. Mais il paraît qu'aujourd'hui PDO est plus approprié.

    L'erreur en effet se situe avant affichage car le mot entier est "l'affichage". Donc l'apostrophe qui fait gueuler MySql.

    J'ai essayé avec PDO::QUOTE mais il faut croire que je l'utilse mal. La snytaxe n'est pas claire donc je continue à chercher

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Ben si je lis bien la doc, il suffit, pour chaque variable utilisée dans la requête, de faire ceci : PDO::quote($la_variable)

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 69
    Points : 67
    Points
    67
    Par défaut
    J'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     $req = $bdd->prepare("UPDATE t_livreortemp SET ip = '$ip', modere = '$mod ere', pseudo = '$pseudo',  mail = '$mail',
            date_message = '$date_message', message = '$message' WHERE id = '$id' ") ;
            //mysql_query("SET NAMES UTF8");
            $req->execute(array($ip,$_POST['modere'],$_POST['pseudo'],$_POST['mail'],$_POST['date_message'],PDO::QUOTE($_POST['message'])));
    Je ne sais pas si ça doit fonctionner avec $_POST mais je ne vois pas pourquoi pas ? Fatal error: Non-static method PDO::quote() cannot be called statically

  6. #6
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Bonjour,

    sans utiliser PDO::quote() et en n'oubliant pas le dernier paramètre (id)...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $req = $bdd->prepare("UPDATE t_livreortemp SET ip = ?, modere = ?, pseudo = ?,  mail = ?, date_message = ?, message = ? WHERE id = ?") ;
     
    $req->execute(array($ip,$_POST['modere'],$_POST['pseudo'],$_POST['mail'],$_POST['date_message'],$_POST['message']),$_POST['id']));
    plus d'info : PDO::prepare()

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 69
    Points : 67
    Points
    67
    Par défaut
    OuiiiiiiiiiiiiiiiiiiiiiiiiiiCa marche. Merci merci merci à vous deux. C'est du tonnerre de dieu.

    Bref je n'aurais pas pu le trouver tout seul. Je vais un peu lire pour comprendre mieux ce que tu as fabriqué à ma requête ska_root.

    Merci encore.

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

Discussions similaires

  1. Quote et double quote dans les requêtes paramétrées
    Par michel.souris dans le forum WinDev
    Réponses: 5
    Dernier message: 07/06/2013, 10h27
  2. [MySQL] Insérer des simples quotes dans ma requête
    Par Rick62 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/06/2009, 15h32
  3. Les quotes dans ma requête "select"
    Par Jonathan_pingu dans le forum SQL
    Réponses: 37
    Dernier message: 14/05/2009, 10h53
  4. [MySQL] Simples quotes dans requête mysql
    Par jean-pierre96 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/05/2007, 17h11
  5. Quotes dans TFilenameEdit (RXLib)
    Par AnnSo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 23/01/2003, 20h26

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