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 :

mysqli_real_escape_string et PDO [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 54
    Points : 13
    Points
    13
    Par défaut mysqli_real_escape_string et PDO
    Bonjour,

    Suite à mes derniers sujets, mon premier script PHP "nouvelle mouture" avec PDO ne fonctionne [évidemment] pas.
    Il s'agit pour l'instant de filtrer une variable récupérée par l'url, avant de l'utiliser dans la requête.

    Je m'inspire de cette page :
    http://us1.php.net/manual/fr/mysqli....ape-string.php

    Voilà mon script de niveau polytechnique++

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try{
    	$bdd = new PDO('mysql:host=localhost;dbname=base_perso', 'perso_basal', 'A)fdfd_RN2K-).');
    }
    catch (Exception $e)
            die('Erreur : ' . $e->getMessage());
    }
    $lettre=mysqli_real_escape_string($bdd , $lettre)
    Script qui a le mérite de produire le poème suivant :

    Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, object given in /home1/repertoire/public_html/ordre-lettres.php on line 76
    La ligne 76, c'est celle du mysqli_real_escape_string.

    A vue de nez, je crois que c'est parce que je tente une salade douteuse entre le PDO et le mysqli.
    Et vous, quel goût trouvez-vous que ça a ? Et comment amélioreriez-vous la recette ?


    Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Puisque tu sais toi même d'où vient le problème, je ne comprends pas pourquoi tu poses la question.

    En PDO et en mysqli, on utilise des requêtes préparées plutôt que d'échapper les valeurs comme on le faisait avec l'API Mysql.
    http://fmaz.developpez.com/tutoriels...omprendre-pdo/
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    c'est parce que je tente une salade douteuse entre le PDO et le mysqli
    Imaginons que tu aies une femme et une maitresse.
    Est-ce que tu crois que si tu demandes à l'une de te faire des trucs que seule l'autre à l'habitude de faire, ça se passera bien ?

    Ben là c'est pareil : si tu demandes à PDO de faire des trucs que seul mysqli sait faire, ça se passe mal !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    Salut cher sabotage,

    Je pose la question parce que je ne vois pas comment la résoudre. Diagnostic n'est pas solution.
    Sur mes précédents sujet datés de ces derniers jours, les membres m'ont dit qu'il n'est point obligatoire de faire des requêtes préparées.

    Mais d'après ce que je lis ici :
    http://code.tutsplus.com/tutorials/p...use--net-24059
    La fonction mysql_real_escape_string() est remplacée au sein de la librairie PDO par la suivante :
    PDO::quote()
    Ce qui donnerait le code suivant, que je m'en vais essayer de suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try{
    	$bdd = new PDO('mysql:host=localhost;dbname=base_perso', 'perso_basal', 'A)fdfd_RN2K-).');
    }
    catch (Exception $e)
             die('Erreur : ' . $e->getMessage());
    }
    $lettre=PDO::quote ($lettre)
    Question : pourquoi deux fois deux points après PDO ?

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Une recherche rapide te donnera une réponse à cette question !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    Oui certes mon cher Bovino. Mais le temps de me répondre cette phrase subtile aurait peut-être pu être avantageusement utilisé pour fournir directement la réponse, tant à ma modeste personne qu'aux autres visiteurs.
    Cela étant, il semble qu'on trouve un début d'explication à ces mystérieux "::" ici :
    http://www.julp.fr/articles/2-3-requeter.html

    Concernant le script, j'ai effectué la modif indiquée dans mon dernier message, à savoir que je fais ça :
    $lettre=PDO::quote ($lettre)
    Et ça ne fonctionne pas.
    J'essaie donc ça :
    $lettre->quote(?lettre) et j'obtiens ça : Parse error: syntax error, unexpected '?', expecting ')'

    Alors je lis cette page :
    http://www.php.net/manual/fr/pdo.quote.php
    Et notamment cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    $conn = new PDO('sqlite:/home/lynn/music.sql3');
     
    /* Chaîne simple */
    $string = 'Nice';
    print "Chaîne non échappée : $string\n";
    print "Chaîne échappée : " . $conn->quote($string) . "\n";
    ?>
    Pourtant j'ai fait pareil. Mais qu'est-ce donc que ce conn=new PDO tout en haut ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    Ah ah !

    J'avais mis un ? au lieu d'un $ ! Eh eh eh !
    Mais ça ne fonctionne toujours pas.

    Je découvre maintenant une nouvelle énigme :
    Fatal error: Call to a member function quote() on a non-object

    L'aventure continue.

  8. #8
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    conn = new PDO(...) signifie que tu créer un objet PDO (objet qui te permet d'accéder à ta base de données).

    Pourquoi tu as mis un "?" ? C'est un "$" dans l'exemple.

    EDIT: la fonction quote est une fonction d'un objet PDO...
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    En piochant comme tu le fais des bouts de code provenant de différents endroits, tu arrives forcement a quelque chose qui ne fonctionne pas.
    Les articles présentent des méthodes parfois différentes et qui ne peuvent pas être mélangées.

    Je ne comprends pas, alors que je t'ai fourni un article qui explique tout de A à Z que tu nous ressortes encore 3 autres sources.
    Pars d'un article complet et comprend le déjà entièrement.

    les membres m'ont dit qu'il n'est point obligatoire de faire des requêtes préparées.
    Certes mais c'est ce qui est recommandé par PHP.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    Je ne supporte plus l'informatique.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 42
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par Le nettoyeur Voir le message
    Je ne supporte plus l'informatique.
    Alors passe à autre chose.

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

Discussions similaires

  1. [PDO] PDO : retour d'expériences
    Par Philsmile dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 25/04/2006, 10h45
  2. Mysql5, Procédure stockée et PDO::LastInsertId()
    Par Philsmile dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 10/04/2006, 13h59
  3. [POO] PHP5 et sérialisation, PDO et MySQL5
    Par sylk974 dans le forum Langage
    Réponses: 2
    Dernier message: 24/03/2006, 17h52
  4. pdo mysql
    Par zenzo dans le forum Requêtes
    Réponses: 11
    Dernier message: 09/03/2006, 00h01
  5. [POO] PDO et fetch_INTO
    Par jeff_! dans le forum Langage
    Réponses: 6
    Dernier message: 25/01/2006, 14h22

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