Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/01/2012, 16h00   #1
Membre du Club
 
Homme
Inscription : septembre 2011
Messages : 71
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 71
Points : 53
Points : 53
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

Citation:

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 :
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
proximacent est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 16h26   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Citation:
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.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 16h43   #3
Membre du Club
 
Homme
Inscription : septembre 2011
Messages : 71
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 71
Points : 53
Points : 53
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
proximacent est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 16h48   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
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)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 16h59   #5
Membre du Club
 
Homme
Inscription : septembre 2011
Messages : 71
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 71
Points : 53
Points : 53
J'ai essayé :

Code :
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
proximacent est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 17h11   #6
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

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

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Bonjour,

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

Code :
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()
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 17h20   #7
Membre du Club
 
Homme
Inscription : septembre 2011
Messages : 71
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 71
Points : 53
Points : 53
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.
proximacent est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h19.


 
 
 
 
Partenaires

Hébergement Web