PHP5 - COUCHE D'ABSTRACTION SGBD

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 10 janv. 2006 à 09:28
pifou25 Messages postés 144 Date d'inscription lundi 13 octobre 2003 Statut Membre Dernière intervention 21 décembre 2014 - 21 déc. 2014 à 22:29
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/35488-php5-couche-d-abstraction-sgbd

pifou25 Messages postés 144 Date d'inscription lundi 13 octobre 2003 Statut Membre Dernière intervention 21 décembre 2014
21 déc. 2014 à 22:29
Bonjour,
pourquoi avoir utilisé des classes abstraites plutot qu'une interface ? en tout cas c'est une excellente idée et je tente de l'appliquer pour pouvoir utiliser indiféremment mysql, mysqli ou pdo.
Gaelcediene Messages postés 3 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 7 février 2007
7 févr. 2007 à 17:00
Vraiment bien ton code. Je l'ai simplifié légèrement puis j'ai créé une classe pour postgresql. Et avec un peu de bidouillage, tout marche impeccablement bien.
Juste une chose : ne pas oublier que pour postgresql, il faut mettre l'hôte, le port, et la base de données dans la string pour se connecter. Donc on met juste un protected function private_selectdb() {
return TRUE;
}
Sinon, c'est le seul petit tru qui risquait de poser problème.
cs_tataye Messages postés 21 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 30 juin 2009
20 août 2006 à 18:31
Bonjour,

Y-a-t'il une erreur dans les sources ?

Quelle que soit la méthode utilisée pour faire une requête, j'ai systématiquement comme erreur Fatal error: Call to undefined method mysql::fetchrow() ...
Amistrad Messages postés 9 Date d'inscription samedi 3 juin 2006 Statut Membre Dernière intervention 14 juin 2006
14 juin 2006 à 10:05
Salut,

En fait il y a quand meme quelque chose.

J'ai des difficultés avec la class dbInterface, je comprend pas bien son fonctionnement, et lorsque j'essaye d'instancier la class mysql il me dit : "
Fatal error: Cannot redeclare class dbinterface in C:\wamp\www\Class\db\b2database.php on line 2"

Si quelqu'un sait pourquoi, en attendant j'essaie de me connecter a mysql
merci

PS: je peux pas supprimer les deux messages précédents qui ne servent a rien... :)
Amistrad Messages postés 9 Date d'inscription samedi 3 juin 2006 Statut Membre Dernière intervention 14 juin 2006
13 juin 2006 à 14:43
bon bah il semblerait que j'ai poser une question avant de chercher.. sorry elle est bien la.
Amistrad Messages postés 9 Date d'inscription samedi 3 juin 2006 Statut Membre Dernière intervention 14 juin 2006
13 juin 2006 à 14:40
Bonjour, je suis tout neuf dans le php et y'a un truc que je comprend pas dans ta "class mysql extends database" Fhx.

Quelle est la class database?? dans ton script l'autre class est dbInterface...

Alors je ne sais pas trop si les questions se font sur les commentaire ou sur le forum mais bon vous m'en voudrez pas. :p

merci
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
16 janv. 2006 à 18:42
Je rajoute aussi :

L'instanciation sans la connection à la base de donnée en automatique n'est que de 150µs sur mon ordi de merde. (un vieux Athlon 1400+ avec 512Mo SDRAM 133MHz)

Alors si quelqu'un peut me tester ca sur un serveur en condition réel je veux bien les chiffres :)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
16 janv. 2006 à 18:36
Updaté, mon bench à l'instanciation passe de 16ms à 5 voir 6ms sur mon ordi.

Et voila, maintenant je suis content :)
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
14 janv. 2006 à 17:50
Ca a l'air plutot sympa tout ça... je ne peux me pencher dessus pour l'instant car je n'ais plus le net chez moi mais dès que c'est revenu j'y jetterais un coup d'oeil... .. . :o)

@ tchaOo°

ps : et je ne t'ais pô oublié FhX dès que je récupère ma connection au net je t'envois la class de xoops... .. . ;o)
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 janv. 2006 à 07:41
Les bench étant très importants quand on travaille sur une base complexe, je pense qu'il serait intéressant d'avoir une méthode interne à cette classe qui puisse "bencher" telle ou telle requête. Perso, je m'en sers régulièrement pour optimiser des requêtes qui me paraissent un peu longues.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
10 janv. 2006 à 20:06
Salut :-)

10/10 c'est propre :-)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
10 janv. 2006 à 18:27
Voui, le seul moyen de faire ca pour le moment est de surcharger la méthode de query().
Ou alors, tu bench la méthode entièrement depuis l'extérieur :

$start = microtime(true);
$db->query();
$end = microtime(true);
$time_elapsed = $end - $start;

A quelques microsecondes on y est presque ! Mais je peux toujours arranger ca dans la classe elle-même aussi !
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
10 janv. 2006 à 18:06
salut

ce qui serait interessant, c'est de faire un bench en même temps :)

Je te laisse t'en occuper :)

je penses à un truc genre
$a->setmodebench('on');
$a->benchreset();
$a->req();

...

echo 'temps de requette sql : ', $a->bench_val();


parceque là, on pourrait faire ça bien plus facilement avec ton code que sans...
shingara Messages postés 10 Date d'inscription jeudi 14 octobre 2004 Statut Membre Dernière intervention 11 janvier 2006
10 janv. 2006 à 10:11
Bravo. Le code est vraiment clair et il y a une très bonne utilisation des exceptions
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 janv. 2006 à 09:28
Je mets 10 parce que je trouve ton code très très bien :-) Encore mieux avec les options ;-)
Rejoignez-nous