CLASSE BASE DE DONNEES , EX AVEC MYSQL & MSSQL [PHP5 & PHP4]

FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 - 20 janv. 2006 à 17:08
docteurflasbios Messages postés 3 Date d'inscription jeudi 22 octobre 2009 Statut Membre Dernière intervention 6 janvier 2011 - 6 janv. 2011 à 01:06
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/35671-classe-base-de-donnees-ex-avec-mysql-mssql-php5-php4

docteurflasbios Messages postés 3 Date d'inscription jeudi 22 octobre 2009 Statut Membre Dernière intervention 6 janvier 2011
6 janv. 2011 à 01:06
Excusez d'avance mon "àl'ouesteté" ....
mais voilà, j'arrive 4 ans après la guerre,
et découvre que des montagnes de talents se sont bien emmerdés à fabriquer des classes fabuleuses
(tous mes compliments) et moi, qui n'ai encore rien inventé utilise un objet tout prêt servi chaud...
c'est peut être con, comme questions, mais :
Que pensez-vous de PDO ? Suis-je complètement Hors-sujet ?
Aviez-vous déjà posté toutes ces sources avant que PDO existe ?
Qu'utiliseriez vous pour des fonctionnalités supplémentaires cette année ?
kendrak Messages postés 4 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 14 août 2009
5 mars 2007 à 13:28
Salut !
Merci pour cette classe bien pratique ^^
par contre j'ai un soucis la... en local c'est chouette ca marche mais une fois chez free non.
Si je tente une connexion classique avec mysql_connect() ca marche mais pas avec cette classe.... je comprends pas et ca me pète le crane depuis hier....

quelqu'un a une idée ?

Merci de votre aide
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
16 janv. 2007 à 15:02
Certes lol, mais bon quand on bosse en générique sur plusieurs versions de php... :-(
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
16 janv. 2007 à 13:51
Bah vi, c'est logique :p

C'est parce qu'on a même pas lu le changelog, sinon on s'en serait appercu :)
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
16 janv. 2007 à 09:36
Bah si on veut...faut bien tester sur quelquechose, moi je teste une ressource mssql, ça m'a paru logique. Nan? ;-) Pas d'ma faute si ils changent les retours au fil de versions de php lol
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
15 janv. 2007 à 21:18
Ca, c'est dla mauvaise gestion d'erreur :p


Na ! :D
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
15 janv. 2007 à 19:25
Ca t'fait rire ;-) ? Moi po, j'ai passé 2 heures à essayer de comprendre pourquoi ça ne marchait pas sur mon serveur, j'me souviens... :-(
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
15 janv. 2007 à 18:41
Ohh mon pauvre :p
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
15 janv. 2007 à 15:42
Il faut modifier ces vérifications en fonction de ce que renvoie mysqli (en l'occurrence, un objet...)
C'est pénible, mais malheureusement les retours des fonctions/méthodes db sous PHP ne sont pas franchement normalisés.
Je réécrirai sous peu une classe d'abstraction DB avec quelques corrections à ce niveau-là notamment (et pas mal d'ajouts).
Par exemple, sur mon pc en local (PHP 5.2), mssql retourne des ressources de type mssql (mssql link, mssql result etc...).
Sur mon serveur en prod (PHP 5.014), les fonctions mssql retournent des identifiants de ressource (des entiers)...
Pénible je vous dis ;-)
dubaddxx Messages postés 6 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 14 décembre 2006
15 janv. 2007 à 15:19
Mouais, j'ai essayé ça, mais il semblerait que le retour de "is_resource ($qry)", dans la classe database, soit
toujours à FALSE.
Du coup je me vois tout le temps afficher le message d'erreur comme quoi il n'y a pas de resources valides.
Alors qu'avec mysql à la place de mysqli, y'a pas ce pb ...
une idée ?
Merci !
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
15 janv. 2007 à 12:28
Il te suffit de créer la classe mysqli, en la calquant sur les autres, et éventuellement ajouter les méthodes supplémentaires dont tu aurais besoin.
dubaddxx Messages postés 6 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 14 décembre 2006
15 janv. 2007 à 12:11
salut.

Cette classe est vraiment pratique et bien pensée, merci en tout cas les gars.
Par contre, j'ai lu que si on veut exécuter des procédures stockées, il faut utiliser un objet de type MYSQLI.

J'imagine dans ce cas qu'il n'est plus possible de l'utiliser tel quelle et qu'il faudrait la revoir ?
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
31 mars 2006 à 12:04
Hello,

assez d'accord, à vrai dire.
Mais j'ai une raison...justement : Le but était en effet d'avoir des classes "typées" les plus simples possible.
Et justement, de ne pas avoir à s'emmerder avec la gestion des erreurs etc...
Sauf qu'évidemment, pour que ce soit le cas, il faudrait que je code toutes les bases possibles, sinon, le mec voulant en ajouter une sera effectivement obligé de modifier aussi la classe primitive.

De toutes façons, il y a pas mal de problèmes liés à cette classe, je dois la modifier, et c'est un bon moment pour le faire je crois :-) vais profiter de ma pause déjeuner pour m'y remettre!

Merci, ceci dit :-)
cs_NoTsu Messages postés 9 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 12 mai 2006
31 mars 2006 à 11:58
Salut,

D'abord bavo pour la classe, elle est vraiment très intéressante pour régler les problèmes d'abstractions de bases de données.
Par contre un truc qui m'a suprit c'est que la gestion des erreurs est gérée dans ta classe primitive ( database ) , et c'est içi que tu fais des distinctions sur le type de base qui est utilisée. Ce qui me semble aller contre l'intéret de la classe, qui est de d'avoir un code commun pour la primitive, et d'avoir un code distinct ensuite sur chacune des classes dérivées.Ainsi à chaque nouveau type de base qu'on souhaites rajouter on a juste à créer un fichier supplémentaire, et pas à aller trippoter le code de database.cls.php.
J'ai pas comprit pourquoi tu avais fait de cette manière.

Sinon le reste c'est vraiment du tout bon, encore bravo.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
20 janv. 2006 à 17:40
T'as raison, j'ai modifié.

J'ai d'autres trucs à ajouter, et de petites erreurs à corriger.
Curieusement...j'utilisais cette classe pour un petit projet, et j'avais pour habitude d'ouvrir ma connexion avant le query () et de la fermer juste après (et donc, avec tout fetch_...). Cela fonctionnait...et cela ne fonctionne plus.
Lol.
Je ne sais pas pourquoi, c'est ce à quoi je m'attèle là, en l'occurence.

Sur mes projets, les perfs sont un poil meilleures, oui.

J'ai récupéré la structure basique de ta classe, avec les private_ parce que je trouvais ça explicite :-)
Après bon, c'est une classe de bdd...lol. On peut pas réinventer la poudre.
J'ai fait ma propre version du bench, du log des erreurs, et surtout, surtout, ce qui m'a paru intéressant était de proposer une version mssql, ce qui est plutôt rare par ici.
Je n'ai pas implémenté les unbuffered queries, parce que mssql ne les gère pas. Du coup je ne les utilise pas ;-)
Mais je vais implémenter ça dès que j'ai un peu de temps libre, et tout le reste au passage, lol. (toutes les fonctions mysql, mssql, de php).
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
20 janv. 2006 à 17:08
Ah c'est bien ce que je pensais, elle me disait plus ou moins quelque chose :)

Content de savoir qu'on peut se servir de ce que j'ai fait pour un tas de choses ! :D
Par contre, petite remarque :
"# if (!empty ($options)) {
# foreach ($options as $clef => $opt) {
# if (array_key_exists ($clef, $this -> options)) {
# $this -> options[$clef] = $opt;
# }
# }
# }"
$opt est forcément TRUE ou false. Hors, quelqu'un qui ne le sait pas forcément (ou un oublis ou autre) peut se tromper.
Il faudrait rajouter (ou plutot modifier) :
if ( array_key_exists($clef, $this->options) && is_bool($opt) ) {
Au moins tu es sur du type :)

C'est une version allégée de la mienne donc j'imagine que les perfs sont un poil meilleur :p
Rejoignez-nous