begin process at 2012 05 27 17:58:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > PHP5 - COUCHE D'ABSTRACTION SGBD

PHP5 - COUCHE D'ABSTRACTION SGBD


 Information sur la source

Note :
9,8 / 10 - par 5 personnes
9,80 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :php5, abstract, sql, class, poo Niveau :Expert Date de création :10/01/2006 Date de mise à jour :16/01/2006 18:37:48 Vu / téléchargé :7 134 / 792

Auteur : FhX

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

 Description

Voila, je re-update un peu le code parce que y'a quand même de la modification (pis ca permet à ceux qui ne vont jamais dans les updates de codes de le voir étant donné que ma classe est désormais un peu plus aboutis qu'avant ! ).

Y'a quoi donc dans tout ca ?
Une classe d'abstraction pour n'importe quel SGBD possible. J'ai comme exemple MySQL et PostGreSQL. Vous verrez comme il est simpliste d'adapter le code pour n'importe quelle base de donnée (un héritage tout ce qu'il y a de plus simple, et peut être une ou deux surcharges).

Source

  • <?php
  • // Alors comment ca marche ?
  • // D'abord on instancie la classe.
  • try {
  • $db = dbInterface::GetInstance('mysql', 'mysql');
  • } catch ( Exception $e ) {
  • die ( $e->getmessage() );
  • }
  • // Changer une option ?
  • $db->set_option('ESCAPE_STRING', FALSE);
  • // Faire une requète ?
  • $xx = 'ezprze';
  • try {
  • $db->prepare("SELECT x,y,z FROM table WHERE xx = '{1}' ", $xx);
  • $db->query();
  • $data = $db->fetchrow();
  • if ( $data[0] === '1' ) {
  • // suite...
  • } else {
  • // sinon ...
  • }
  • } catch ( db_exception $e ) {
  • $e->die_on_error();
  • }
  • // L'ancienne méthode marche aussi !
  • // $sql = "SELECT...";
  • // $query = $db->query($sql);
  • // $data = $db->fetchrow($query);
  • ?>
<?php
// Alors comment ca marche ?
// D'abord on instancie la classe.

try {
  $db = dbInterface::GetInstance('mysql', 'mysql');
} catch ( Exception $e ) {
  die ( $e->getmessage() );
}

// Changer une option ?
$db->set_option('ESCAPE_STRING', FALSE);

// Faire une requète ?
$xx = 'ezprze';
try {
 $db->prepare("SELECT x,y,z FROM table WHERE xx = '{1}' ", $xx);
 $db->query();
 $data = $db->fetchrow();
  if ( $data[0] === '1' ) {
    // suite...
  } else { 
    // sinon ...
  }

} catch ( db_exception $e ) {
  $e->die_on_error();
}
// L'ancienne méthode marche aussi !
// $sql = "SELECT...";
// $query = $db->query($sql);
// $data = $db->fetchrow($query);

?>

 Conclusion

Y'a encore quelques options que j'ai pas renseigné, mais les noms veulent tout dire ! Je metterai un peu plus de documentation un peu plus tard.

Si y'a de l'optimisation à faire, je suis preneur :)

J'ai ajouté un multiton via la classe dbInterface. Ca permet d'éviter ce que l'ancienne classe faisait : Ouvrir une nouvelle connection pour rien.
Résultat ? J'ai gagné mes 9ms que je perdais avant... ! Je suis donc aussi rapide qu'une connection via fonction.

Pour récupérer votre connection dans une autre classe, il suffit de faire :
<?php
class x {

public function __construct() {

  $this->db = dbInterface::GetInstance('mysql'); // Si vous avez déja instancier la classe avec comme nom : mysql;

// OU

  $this->db = dbInterface::GetInstance('mysql', 'mysql'); // Si vous n'êtes pas sur, il établira la connection automatiquement si elle n'existe pas.
}

}

 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

10 janvier 2006 14:56:01 :
Ajout d'une petite classe multi BDD
16 janvier 2006 18:35:27 :
Ajout d'un multiton pour optimiser les perfs. Amélioration et clarification du code. Oubli cependant du mode de bench... !
16 janvier 2006 18:37:48 :
J'ai oublié le ::GetInstance :o

 Sources du même auteur

PHP5 - UTILISATION DES ITÉRATEURS ET DE LA RÉFLECTION.
PHP 5 - CLASSE MYSQL (STYLE MYSQLI)
[PHP5] CLASSE DATE/HEURE
PHP5 - GESTION DE MODULES EN OBJET
PHP5 - CLASSE DE NEWS ET DE COMMENTAIRES

 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

CLASS RECHERCHE PHP5 POO par mtrix000
CLASS AUTHENTIFICATION PHP5 POO par mtrix000
CLASS PAGINATION PHP5 POO par mtrix000
[PHP5] CLASSE DE NEWS par FhX
Source avec Zip SYSTEME DE NOUVELLE POO par hametsu21

Commentaires et avis

Commentaire de malalam le 10/01/2006 09:28:32 administrateur CS

Je mets 10 parce que je trouve ton code très très bien :-) Encore mieux avec les options ;-)

Commentaire de shingara le 10/01/2006 10:11:04

Bravo. Le code est vraiment clair et il y a une très bonne utilisation des exceptions

Commentaire de coucou747 le 10/01/2006 18:06:53 administrateur CS

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...

Commentaire de FhX le 10/01/2006 18:27:31

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 !

Commentaire de Anthomicro le 10/01/2006 20:06:27

Salut :-)

10/10 c'est propre :-)

Commentaire de malalam le 11/01/2006 07:41:48 administrateur CS

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.

Commentaire de kankrelune le 14/01/2006 17:50:46

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)

Commentaire de FhX le 16/01/2006 18:36:35

Updaté, mon bench à l'instanciation passe de 16ms à 5 voir 6ms sur mon ordi.

Et voila, maintenant je suis content :)

Commentaire de FhX le 16/01/2006 18:42:33

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 :)

Commentaire de Amistrad le 13/06/2006 14:40:29

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

Commentaire de Amistrad le 13/06/2006 14:43:17

bon bah il semblerait que j'ai poser une question avant de chercher.. sorry elle est bien la.

Commentaire de Amistrad le 14/06/2006 10:05:59

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... :)

Commentaire de tataye le 20/08/2006 18:31:48

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() ...

Commentaire de Gaelcediene le 07/02/2007 17:00: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.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

templates avec poo [ par lesnes ] bonjours je reprogramme totalement mon site en poo et je souhaiterai utiliser les templates mais l'on ne peut pas faire appel a une class exterieur a Class POO retourné le nom de l'objet [ par MeTh ] Bonjour,Comment retourné le nom de l'objet déclaré?exemple :$monobjet = new GridR();comment recuperé $monobjet dans ma class?Merci j'ai un problem sql et class [ par theyas ] salut j un problem ou partie de class news je vais ajouté un condition sql(where)pour afficher seulment les enregistrement qui porte le nom champ(nom_ [POO] Une classe dans une classe [ par Mrreivax ] Bonsoir.Et bien voila. J'ai créé une classe de gestion des images.J'ai par la suité créé une autre classe de gestion de banières.Mais, cette dernière Projet PHP5/SQL [ par alexgeek ] Bonjour,Je suis débutante en PHP et j'ai un projet en php my sql à faire puisque je suis en stage, si quelqu'un pouais m'aider à le faire je lui serai Problème de variables en dehors d'une class [ par yukimura27 ] Bonjour à tous, J'ai un problème pour utiliser une variable en dehors de ma class. Voici mon code: class pouet { public function SelectAll () { PHP5 SQL TIME [ par ftsitoha ] Bonjour les amies !!! Question web PHP- SQL -TIME? J&#8217;aimerai bien connaître l&#8217;erreur de ces 2 scriptes, mon attribue n&#8217;est pas ti comment crypter mon mot de passe [ par msi079 ] salut . j'ai un code qui marche mais mon problème est que le mot de passe n'est pas crypté . je suis débutant en php je sais pas comment m'y prendre. connexion BDD SQL Server [ par akkaoui ] Salut tout le monde! J'essaie de se connecter à une base de donnée SQL server via un script php pour mon projet Donc j'utilise le code suivant Code


Nos sponsors


Sondage...

Comparez les prix

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,889 sec (3)

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