Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > PEAR > DB & MDB2
DB & MDB2 Forum d'entraide pour les bibliothèques DB et MDB2 du framework PEAR, permettant de manipuler les bases de données en PHP. Avant de poster -> tutoriels DB et MDB2
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 17/10/2004, 23h46   #1
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 022
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 022
Points : 1 123
Points : 1 123
Par défaut [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 :
SELECT count(*) as quantite FROM sp_coach WHERE lib_coach='COACH1'
Je l'execute simplement avec un
Code :
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 :
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 :
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 !
__________________
Alexandre T.

PHP5/MySQL5 Codes prêts à l'emploi
30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

Mes articles
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2004, 18h07   #2
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 022
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 022
Points : 1 123
Points : 1 123
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 !
__________________
Alexandre T.

PHP5/MySQL5 Codes prêts à l'emploi
30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

Mes articles
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2004, 23h31   #3
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 022
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 022
Points : 1 123
Points : 1 123
Exactement :

Citation:
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
__________________
Alexandre T.

PHP5/MySQL5 Codes prêts à l'emploi
30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

Mes articles
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2004, 09h44   #4
Membre régulier
 
Inscription : décembre 2002
Messages : 89
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 89
Points : 94
Points : 94
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.
naholyr 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 12h57.


 
 
 
 
Partenaires

Hébergement Web