begin process at 2012 05 27 17:57:07
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > PHP5 CLASSE GÉNÉRIQUE GESTION ROUTINES MYSQL

PHP5 CLASSE GÉNÉRIQUE GESTION ROUTINES MYSQL


 Information sur la source

Note :
Aucune note
Catégorie :Class et Objet ( POO ) Classé sous :php5, classe, mysql, utf8, bdd Niveau :Débutant Date de création :18/01/2007 Date de mise à jour :22/04/2007 18:09:01 Vu / téléchargé :13 455 / 684

Auteur : oxxo

Ecrire un message privé
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

 Description

...



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

18 janvier 2007 07:37:58 :
juste erreur dans la définition du niveau de cette source, c'est bien évidemment un niveau débutant.
22 avril 2007 18:09:02 :
...

 Sources de la même categorie

Source avec Zip GÉNÉRATION AUTOMATIQUE DE FICHIER .CLASS.PHP EN FONCTION D'U... par ig3
CLASSE D'OBJET DE CRYPTAGE ET DÉCRYPTAGE DE CHAINES DE CARAC... par 8Tnerolf8
Source avec Zip MY.DEVIANTART API par inwebo
CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter

 Sources en rapport avec celle ci

Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
PHP 5 - CLASSE MYSQL (STYLE MYSQLI) par FhX
CLASSE PHP5 POUR SE CONNECTER À MYSQL AVEC GESTION D'ERREURS par hpph
Source avec Zip CLASSE BASE DE DONNEES , EX AVEC MYSQL & MSSQL [PHP5 & PHP4] par malalam
Source avec Zip [PHP 5] CLASSE SQL par FhX

Commentaires et avis

Commentaire de oxxo le 18/01/2007 07:25:46

Voila, j'attends vos commentaires. D'autres sources viendront très prochainement pour compléter celle ci.

(classes facilitant la construction de requêtes, classe de gestion utilisateurs pour module d'administration, classe pour la gestion des mails ...)

Vive PHP5 et vive la POO, sans qui de pauvres développeurs comme nous n'aurions pas de vie sexuel.

Commentaire de malalam le 18/01/2007 08:23:15 administrateur CS

Hello,

faudrait que je regarde en détail, mais j'ai des questions et des remarques, en vrac, sans aller chercher trop loin :
Pourquoi appelles-tu tes méthodes privées non statiques via self::maMethode () ?
Tu devrais laisser le choix d'utiliser ou non ton bench dans la méthode query. Ca, moi, je l'utilise en dév, mais pas en prod, c'est du temps et des ressources perdues pour rien.
Un tableau de log d'erreurs aurait été mieux venu, en statique pourquoi pas, référencé par la ressource de connexion et la requête. Ca faciliterait le suivi et la sauvegarde des logs, le cas échéant.
Je ne vois pas l'intérêt de forcer par défaut les paramètres de connexion. On aurait même pu imaginer une seule instance de ton objet gérant plusieurs connexions. Pourquoi pas.
Quant tu codes en POO, autant coder de manière stricte :
if(stristr($this->query, 'select') == true)
ça, ce n'est pas strict du tout, c'est même du laisser aller :
if(stristr($this->query, 'select') === true)
C'est un détail dans ce cas-ci, mais ça peut ne pas l'être dans d'autres cas.
Ensuite, je n'aurais pas codé ça comme ça mais bon, là...c'est de la préférence.
Plus largement, tu devrais utiliser les exceptions pour gérer tes erreurs.

Bref, je dois aller bosser, donc ma dernière remarque est moins gentille : qu'apporte ta classe ?   Pourquoi l'utiliser plutôt que les fonctions mysql_* de php, ou mysqli ?
Il n'y a pas d'abstraction, tu ne facilites pas l'utilisation, tu obliges à mixer les méthodes de ta classe avec les fonctions mysql de base, tu n'apportes pas de nouvelles fonctionnalités.

Bref, ton code est clair, agréable à lire, mais y a du boulot, selon moi. Tant pour le code en lui-même que pour son utilité.

Commentaire de kankrelune le 18/01/2007 13:08:28

Comme malalam je ne vois pas l'interet de faire une classe sgdb si ce n'est pas une class d'abstraction... .. .

Sinon pourquoi forcer à instancier un objet à chaque fois qu'on veut faire une requete... c'est couteux en perf et il n'y a aucun gain... au contraire tu devrais plus t'orienter vers du singleton... .. .

@ tchaOo°

Commentaire de malalam le 18/01/2007 14:04:54 administrateur CS

J'avais même pas noté qu'il forçait une instance pour chaque requête; c'est effectivement une très mauvaise idée.

Commentaire de kankrelune le 18/01/2007 16:38:29

Bah oui c'est pas très propre et v'la ce qu'elle se prend la mémoire... muarf... qui plus est... j'avais pas vu mais... les methodes de traitement des données (mysql_fetch_* & co) ne sont pas implémentées donc il faut jongler entre la classe et les fonctions natives... bref bof bof... .. . :o(

@ tchaOo°

Commentaire de oxxo le 18/01/2007 17:51:25

Je vous aime ! Je sens que je vais progresser avec vous.
Alors je reprends dans l'ordre :

"Pourquoi appelles-tu tes méthodes privées non statiques via self::maMethode () ?"

=> Comment devrais-je les appeler ? "maMethode()", tout simplement ?

"Tu devrais laisser le choix d'utiliser ou non ton bench dans la méthode query"

=> Tout à fait d'accord. Et je prends note pour les logs.

"Je ne vois pas l'intérêt de forcer par défaut les paramètres de connexion."

=> Et bien parce que je trouve cela plus simple, dans la majorité des cas, je n'utilise qu'une seule bdd sur un seul et même serveur. Le fait de le définir dans la classe me permet le cas échéant de ne modifier que la valeur par défaut de ces attributs sans avoir a rechercher dans la masse des autres fichiers les endroit ou j'initialise une connexion. Question de facilité donc et de maintenance du code. Tout en gardant la possibilité de se connecter à un autre serveur …

"Quant tu codes en POO, autant coder de manière stricte. === et non =="

=> Quelle est la différence entre if($a == 'ok') et if($a === 'ok') ? Merci de m'éclairer sur ce point.

"tu devrais utiliser les exceptions pour gérer tes erreurs."

=> Tout à fait d'accord, je prends note.

Voila pour l'essentiel, je prend donc bien note de vos remarques. Concernant le singleton, je procédais comme cela avant, je vois qu'apparemment c'est préférable de continuer sur cette voie.

Pour la prochaine version, corrigez moi si j'en oubli :

Une classe abstraite nommée "sgbd", ce qui permettra de dériver d'autres classes en fonction du type d'sgbd.

Une classe fille de sgbd nommée "mysql" sur le principe du singleton. Donc un seul objet mysql dans le script à qui j’envois toutes les requêtes. Economie de mémoire, effectivement, et de ligne de code.
Possibilité de bench, au choix de l’utilisateur avec logs.(un booléen à l’instanciation, génération des logs en xml…)
Et du coup, avec toutes ces modifs (réécriture complète devrais-je dire…),  je pense que la classe apportera des fonctionnalités intéressantes par rapport aux fonctions mysql_* de php, ou mysqli, pour répondre à ta question MALALAM. (qui plus est mysqli est loin d’être installer chez la majorité des hébergeurs…).

Je me mets au boulot et je vous montre tous ça, merci pour tous ces conseils.

Commentaire de kankrelune le 18/01/2007 18:24:28

"Comment devrais-je les appeler ? "maMethode()", tout simplement ?"

==> $this->maMethode();

"Quelle est la différence entre if($a == 'ok') et if($a === 'ok') ? Merci de m'éclairer sur ce point"

la comparaison strict compare la valeur et le type... la comparaison non strict compare la valeur convertie numériquement... exemple... .. .

$test1 = false;

if($test1 == 0)
    // ça passe pourtant test 1 ne vaut pas (int)0 mais (bool)false

if($test1 === 0)
   // ça ne passe pas car test1 ne vaut pas (int)0

en outre tu gagne (très légèrement) en perf car php ne perd pas de temps à convertir la valeur de la variable en valeur numérique... .. .

@ tchaOo°

Commentaire de oxxo le 18/01/2007 18:26:02

Ok, merci beaucoup.

Commentaire de malalam le 19/01/2007 08:04:45 administrateur CS

Oxxo => Il y a déjà beaucoup de classes d'abstraction de base de données, sur le site. Regardes en quelques unes, ça te donnera sans doute des idées.

Le singleton, oui...et non. Perso, j'ai souvent besoin d'accéder à 2 bdd différentes dans un même script (parce que j'ai un utilisateur par bdd et limité à SA bdd...et pas un utilisateur global ayant accès à tt le serveur de bdd, question de sécurité), et le singleton est problématique pour ça. Il faut en permettre ou non l'utilisation, en fait.

Commentaire de oxxo le 19/01/2007 20:30:07

Merci d'aller dans mon sens MALALAM, en réécrivant la classe, j'ai effectivement eu des soucis pour me connecter à des bases différentes avec le singleton, mais j'ai réglé le problème.

Je poste une nouvelle source très prochainement.

Je tiens à vous remercier car je pense avoir bien progressé. La classe est déjà fonctionnelle, la je taff sur la génération des logs pour le bench et pour les erreurs.

Pourrais-tu me mettre sur la voie pour permettre ou non l'utilisation du singleton ?

Merci

Commentaire de malalam le 20/01/2007 08:49:53 administrateur CS

Je ne vais pas vraiment dans ton sens lol...je dis juste que le singleton convient dans la plupart des cas, mais pas dans tous. Par contre, on ne DOIT PAS balancer la requête dans le constructeur de la classe, comme l'a dit Kankrelune.
La classe que j'utilise à mon taf se gère comme une autre classe : pas de singleton, on peut l'instancier autant de fois que l'on veut.
Mais l'instanciation ne fait que te connecter à ta bdd avec tes paramètres. Pour me connecter à une autre bdd, j'instancie un nouvel objet.
On peut aussi imaginer un seul objet en singleton, mais plusieurs ressources de connexion possible gérées au sein de ton objet.
Ou encore, le principe d'un multiton.
Y a des tas de manières de faire. A toi de trouver celle qui te convient le mieux.

Commentaire de kankrelune le 20/01/2007 09:59:48

moi mon singleton gère les multiple connection... .. . ;o)

je stock tout dans un tableau dont les index sont

$myObjectArray['dbType:serverName:dbName'] = $myObject;

si tu change de type de sgdb, de serveur ou de base le singleton instancie un nouvel objet tout en gardant les avantages du singleton... .. . ;o)

@ tchaOo°

Commentaire de guill76 le 20/01/2007 18:33:22

salut,
Autre chose, tes controles dans free_result ne te servent pas puisque tu utilises le masque d'erreur @ pour mysql_free_result.

En plus si tu enlèves le @, tes contrôles ne seront pas performants car une
requête du type insert into tablename champs1,champs2 values ('select','val2') provoquera une erreur, essaies donc de trouver plutôt un pattern decrivant les mots clès select,show,explain à parser avec une fonction preg si tu veux aller dans ce sens.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

MySQL [ par intello2001 ] j'ai fait une base MySQL toute neuve, toute VIDE !!je voudrai avoir des exemple de création de table et tt sa...je c juste sa :$host="sql.free.fr";$ba BDD mysql --> Access [ par YarbY ] SalutJ'ai un site qui tourne avec une base de donées mysql, et je voudrais récupérer les données dans Access, en gardant ma base sur le serveur. Je ve postgresl --> mysql [ par NDK ] Bonjour, Je dois reprendre un site qui a été réalisé en php avec une bdd en Postgresql, et j'aimerais convertire le code pour qu il travaille avec une Php & MySql ??? [ par nova85 ] Je voudrai savoir si il est possible de realiser un site assez important juste avec une BDD mysql , si c'est capable de resister , et surtout savoir s classe PHP pour accés BDD [ par cuicui ] Bonjour,Je recherche des classes en PHP qui perùet d'acceder à des des bases de données tel que INTERBASE ou MySQL.Merci à touscuicui... image php Mysql [ par arnaldo21 ] bonjour pourriez-vous me donner un exemple concret d'affichage d'image a partir d'une bdd. J'utilise un upload qui stock le nom de l'image dans la bdd Pb passage PHP4 -> PHP5 [ par Galmiza ] Salut,J'ai acheté un bouquin pour débuter le PHP.J'ai suivi a la lettre les instructions du livre:-installer EasyPHP 1.7-installer PHP 5.0..-lancer Ea PHP5 et MySQL 4.1.7 [ par TMT ] J'ai installé PHP5 et MySQL sur mon Windows XP avec IIS. J'ai bien activé le module php_mysql dans le fichier php.ini Là mon problème est qu-à chaque Problème affichage BD multiples [ par ekipage2 ] Bonjour,j'ai plusieurs BD : eleve / matières / et exercicesLorque l'élèv se connecte, il peut afficher la liste des exercices correspondants à sa clas Connection mysql avec php5 [ par Chess0 ] Bonjour, j'ai installé récemment la dernière version de mysql ainsi que la dernière version de php (5). J'ai essayé la connec


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales