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

Bibliothèques et frameworks PHP Discussion :

[PEAR][DB] Pourquoi lance-t-il des EXPLAIN ? [FAQ]


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut [PEAR][DB] Pourquoi lance-t-il des EXPLAIN ?
    Bonjour,

    Je veux prévenir l'existence de doublons. J'ai bien pensé à insérer et analyser le code de retour, mais mon application doit tourné sur plusieurs systèmes de bases de données. J'utilise donc la classe DB de PEAR.

    Je regarde si il existe déjà un coach de son nom dans ma base.
    La requête standard est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(*) as quantite FROM sp_coach WHERE lib_coach='COACH1'
    Je l'execute simplement avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $lo_result=$go_db->Query('SELECT count(*) as quantite FROM sp_coach WHERE lib_coach=?',$ls_coach);
        if (DB::isError($lo_result)) {
            die($lo_result->getUserInfo());
        } else {
            $lo_ligne = $lo_result->fetchRow();
            if (!empty($lo_ligne->quantite)){
               //DOUBLON
            }
        }
    Pourtant quand je regarde les logs des requetes qui sont executer j'en vois deux et non une :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		   1942 Init DB     smileypaintball
    		   1942 Query       EXPLAIN SELECT count(*) as quantite FROM sp_coach WHERE lib_coach='COACH1'
    		   1942 Query       SELECT count(*) as quantite FROM sp_coach WHERE lib_coach='COACH1'
    		   1942 Quit
    Voici le cde qui précède ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    require_once 'DB.php';
     
    $go_db =& DB::connect('mysql://root:localhostmvtmjsunp@localhost/smileypaintball');
    if (DB::isError($go_db)){
        die($go_db->getMessage());
    }
    $go_db->setFetchMode(DB_FETCHMODE_OBJECT);
    $go_db->setOption('seqname_format','sequence_%s');
    D'où viens donc cette demande d'EXPLAIN et à quoi sert-elle ? (Je connais la signification d'EXPLAIN. Je demande pourquoi PEAR lance cette requête en plus et si il est possible de l'éviter. Car dans ce cas c'est clairement inutile !

  2. #2
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    J'ai trouvé...

    Le problème ne vient pas de PEAR mais de PHP5
    En effet, sous PHP5, je me suis mis dans le niveau d'erreur le plus bas. C'est-à dire que j'affiche les Notice,Warning et Fatal Erreur, mais aussi les informations de d'aide à la programmation. Et PHP5 teste si les requêtes de Selection sont optimisés et utilise un index ou si, au contraire, elles entraîne un SCAN de toute la table. C'est ce dernier test qui est à l'origine de cette drôle de requête EXPLAIN.

    En fait, c'est déroutant quand on ne s'y attend pas, mais cela s'avère extrêment utile pour optimiser son code !

  3. #3
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Exactement :

    E_STRICT - run-time notices, enable to have PHP suggest changes
    to your code which will ensure the best interoperability
    and forward compatability of your code

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 89
    Points : 114
    Points
    114
    Par défaut
    Diantre, je m'étais arrêté à E_ALL. Merci du tuyau, je ne pensais pas qu'il y avait un niveau de diagnostic élevé dans les rapports d'erreur.

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

Discussions similaires

  1. [MySQL] Pourquoi dois-je utiliser des "quotes penchées" dans mes requêtes?
    Par v4np13 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/03/2008, 00h23
  2. Réponses: 4
    Dernier message: 26/11/2007, 13h25
  3. Pourquoi faut-il utiliser des tables plutôt que des frames ?
    Par malicia_bm dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 09/10/2006, 10h20
  4. Pourquoi ça m'insère des /> ?
    Par baleiney dans le forum Langage
    Réponses: 3
    Dernier message: 03/07/2006, 01h19

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