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

Langage PHP Discussion :

pdo : ne pas choisir entre exec et query


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut pdo : ne pas choisir entre exec et query
    Bonjour,

    avant, j'avais codé une interface pour exécuter toute requête SQL sur une table MYSQL. Quelle que soit la requête, j'utilisais mysql_query, fonction à laquelle je passais la requête saisie par l'utilisateur (et s'il se trompait, ça affichait un message d'horreur ()). Maintenant, je voudrais coder la même interface avec PDO ; or, selon, la requête il faut utiliser soit la méthode exec, soit la méthode query. Comme d'avance, on ne sait quelle va être la bonne, est-il possible de passer la requête aux 2 méthodes et selon le résultat, distinguer quelle était la bonne ?

  2. #2
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 391
    Points
    9 391
    Par défaut
    Tu peux toujours tout passer par la méthode query() avec PDO, cette fonction gère tous les types de requêtes.
    Mais il vaut mieux si tu as des paramètres passer par des requête préparées.

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    OK, ne sachant pas encore ce que sont les requêtes préparées, je vais regarder, mais pour mon interface, n'ayant aucune information, je vais utiliser la méthode query().
    Cela dit, avant, n'ayant aucune idée du retour, je faisais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($ligne = mysql_fetch_array($result, MYSQL_NUM))...
    Comment faire maintenant ?

  4. #4
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 391
    Points
    9 391
    Par défaut
    Avec l'objet retourné par PDO::query() qui est un PDOStatement.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Soit $res notre retour de query()
    while ($ligne = $res->fetch() )

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    ou direct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($res as $ligne)

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    OK, mais pour l'instant, la requête n'est même pas exécutée ! surement une erreur bête de PHP : notamment la connexion utilise try, et je ne l'ai jamais utilisé ; il y a des chances que l'erreur soit là ; voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    include_once("connect_pdo_1and1.php");
     
    $connexion = connect();
    $sql=---;
     
    $resultats=$connexion->query($sql);...
    avec connect_pdo_1and1.php :
    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
    <?php 
    function connect() {
    try
    {
    $PARAM_hote='---'; // le chemin vers le serveur
    $PARAM_port='---';
    $PARAM_nom_bd='---'; // le nom de votre base de données
    $PARAM_utilisateur='---'; // nom d'utilisateur pour se connecter
    $PARAM_mot_passe='---'; // mot de passe de l'utilisateur pour se connecter
    $dsn = 'mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd;
    //var_dump($dsn);
    $connexion = new PDO($dsn, $PARAM_utilisateur, $PARAM_mot_passe);
    $connexion ->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
     
    }
     
    catch(Exception $e)
    {
            echo 'Erreur : '.$e->getMessage().'<br />';
            echo 'N° : '.$e->getCode();
    }
    return($connexion);
    }
     
    ?>
    L'erreur affichée est :
    Fatal error: Call to a member function query() on a non-object in /homepages/18/d246623212/htdocs/bdd/traitrequete_pdo.php on line 11

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    fait un var_dump($connexion);

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    résultat : NULL

  9. #9
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    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
    function connect() {
    try
      {
           $PARAM_hote='---'; // le chemin vers le serveur
           $PARAM_port='---';
           $PARAM_nom_bd='---'; // le nom de votre base de données
           $PARAM_utilisateur='---'; // nom d'utilisateur pour se connecter
           $PARAM_mot_passe='---'; // mot de passe de l'utilisateur pour se connecter
           $dsn = 'mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd;
           //var_dump($dsn);
           $connexion = new PDO($dsn, $PARAM_utilisateur, $PARAM_mot_passe);
           $connexion ->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
           var_dump($connexion);
           return($connexion);
      }
     
    catch(Exception $e)
      {
            echo 'Erreur : '.$e->getMessage().'<br />';
            echo 'N° : '.$e->getCode();
      }
    }

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Quel est le problème ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = stripslashes($_POST['requete']);
    echo ('sql='.$sql.'<br>');
    $res=$connexion->query($sql);
    foreach ($res as $ligne)
        echo($ligne);
    La requête est "show tables" et ça m'affiche
    ArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArray

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727

  12. #12
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Oui, mais à quel endroit, car :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = stripslashes($_POST['requete']);
    echo ('sql='.$sql.'<br>');
    $res=$connexion->query($sql);
    foreach ($res as $ligne)
        print_r($ligne);
    pas bon...

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    regarde ta source HTML il devrait t'afficher quelque chose la

  14. #14
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Quand je regarde la source html, je vois la même chose qu'avec le print_r ; ça :
    Array ( [Tables_in_db317093416] => act_dec3 [0] => act_dec3 ) Array ( [Tables_in_db317093416] => act_div3 [0] => act_div3 ) Array ( [Tables_in_db317093416] => act_geoloc [0] => act_geoloc ) Array ( [Tables_in_db317093416] => act_log [0] => act_log ) Array ( [Tables_in_db317093416] => act_mar3 [0] => act_mar3 ) Array ( [Tables_in_db317093416] => act_metadb [0] => act_metadb ) Array ( [Tables_in_db317093416] => act_metalg [0] => act_metalg ) Array ( [Tables_in_db317093416] => act_mgrplg [0] => act_mgrplg ) Array ( [Tables_in_db317093416] => act_nai3 [0] => act_nai3 ) Array ( [Tables_in_db317093416] => act_params [0] => act_params ) Array ( [Tables_in_db317093416] => act_prenom [0] => act_prenom ) Array ( [Tables_in_db317093416] => act_sums [0] => act_sums ) Array ( [Tables_in_db317093416] => act_traceip [0] => act_traceip ) Array ( [Tables_in_db317093416] => act_user3 [0] => act_user3 )
    qu'est-ce que je fais de ça ?

  15. #15
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    c'est les résultats de ta requete t'en fait ce que tu veux

  16. #16
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Ce qui est bizarre, c'est que ça ne correspond pas du tout au nom de mes tables, et que ça n'en retourne que 14, alors qu'avec mysql_query, il y en a 18...

  17. #17
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    J'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($res as $ligne)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($ligne = $res->fetch() )
    et le résultat est exactement le même : si je m'intéresse aux requêtes préparées, est-ce que ça risque d'être mieux ?

  18. #18
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    J'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($res as $ligne)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($ligne = $res->fetch() )
    et le résultat est exactement le même : si je m'intéresse aux requêtes préparées, est-ce que ça risque d'être mieux ?
    ça ne changera rien

  19. #19
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 391
    Points
    9 391
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Ce qui est bizarre, c'est que ça ne correspond pas du tout au nom de mes tables, et que ça n'en retourne que 14, alors qu'avec mysql_query, il y en a 18...
    Tu es sûr d'exécuter ta requête sur la bonne base de données ?

  20. #20
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Tu es sûr d'exécuter ta requête sur la bonne base de données ?
    Malheureusement, oui...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 13
    Dernier message: 28/01/2009, 01h21
  2. [UML][Debutant]Choisir entre une classe et une interface ?
    Par Laurent Dardenne dans le forum Diagrammes de Classes
    Réponses: 11
    Dernier message: 24/04/2006, 21h45
  3. Choisir entre php et XSL
    Par vg33 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 15/04/2006, 03h40
  4. [FEDORA] Lequel choisir entre Fedora i386 et x86 pour un xeon?
    Par Oberon dans le forum RedHat / CentOS / Fedora
    Réponses: 7
    Dernier message: 13/07/2004, 15h52
  5. LIKE de tout ce qui n'est pas compris entre a<-&
    Par DjinnS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/07/2003, 14h09

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