Section: drivers pour jDb
« drivers pour jAuth | ^ Développer et utiliser des plugins | plugins pour jDao » |
− Table des matières
jDb, la couche d'abstraction d'accès aux bases de données, a un système de plugin, ou "drivers". Un driver permet d'accéder à un type de base de données spécifique.
Activation ¶
Pour savoir comment activer un driver pour jDb, voyez le chapitre sur jDb.
Création d'un driver ¶
Un driver pour jDb est constitué de plusieurs classes :
- une classe pour la connexion à la base de données et l'exécution des
requêtes, héritant de
jDbConnection
- une classe pour récupérer les résultats, héritant de
jDbResultSet
- des classes pour interroger et modifier le schéma d'une base de donnée.
Elles héritent de
jDbSchema
etjDbTable
.
Fichiers et nommages ¶
Un driver possède un nom identifiant. Prenons le nom "exemple" pour la suite.
Les fichiers du driver doivent se trouver dans un répertoire db/exemple/
dans un dépôt de plugins.
Les noms des fichiers doivent suivre ce nommage :
exemple.dbconnection.php
pour la classe de connexionexemple.dbresultset.php
pour la classe de resultsetexemple.dbschema.php
pour les classes de manipulation de schemas
Et dans chacun de ces fichiers, les classes doivent respectivement avoir le nommage suivant :
exempleDbConnection
exempleDbResultSet
exempleDbSchema
etexempleTableSchema
Classe de connexion ¶
Elle doit hériter de jDbConnection
qui contient quelques méthodes
abstraites qu'il faut définir. Son rôle est de se connecter/déconnecter à la
base de donnée. Elle est chargée aussi d'initier les transactions et de les
confirmer ou annuler. Enfin, elle exécute ou prépare les requêtes, en renvoyant
un objet résultat.
Pour ce faire, elle doit redéfinir les méthodes suivantes :
- le constructeur s'il y a besoin de faire des choses à l'instanciation du driver. Typiquement, vérifier que les fonctions PHP nécessaires sont bien là.
_connect()
et_disconnect()
, pour la connexion et la déconnexion à la base de données_quote
, pour échapper une chaîne de caractère avant que celle-ci soit utilisée dans une requête_doQuery
et_doLimitQuery
, pour lancer des requêtes qui ramènent des enregistrements (SELECT ou procédures stockées). Elles doivent renvoyer un objetexempleDbResultSet
ou false si la requête a échoué_doExec
, pour lancer des requêtes ne renvoyant pas d'enregistrements (UPDATE, DELETE, INSERT...). Doit renvoyer le nombre d'enregistrements affectés, ou false si la requête a échoué- la méthode
prepare()
, pour préparer les requêtes. beginTransaction()
,commit()
,rollback()
, pour les transactionserrorInfo()
eterrorCode()
renvoyant l'intitulé et le code de la dernière erreurlastInsertId()
, permettant de récupérer la dernière valeur du dernier id autoincrémenté généré._autoCommitNotify()
Si le driver ne prend pas en charge certaines fonctionnalités, il doit générer une exception.
Voir la référence de jDbConnection pour plus de détails.
Classe de résultat ¶
Elle doit hériter de jDbResultSet
qui contient quelques méthodes
abstraites qu'il faut définir. Un objet de cette classe est normalement renvoyé
par les méthodes prepare
, _doQuery
, _doLimitQuery
et prepare()
de la classe exempleDbConnection
.
Vous devez notament redéfinir les méthodes suivantes :
_fetch()
, qui doit récupérer l'enregistrement suivant dans la liste des résultats. Elle doit tenir compte de la propriété_fetchMode
. Dans la propriété_idResult
, vous trouverez l'identifiant de la ressource liée aux résultats._free()
, pour libérer la ressource liée aux résultats (_idResult
)_rewind()
, pour revenir au début des résultatsrowCount
, pour retourner le nombre de résultatsbindColumn
,bindParam
,bindValue
,columnCount
etexecute
pour les requêtes préparées.
Voir la référence de jDbResultSet pour plus de détails.
Classe pour le schema ¶
Une classe héritant de jDbSchema doit permettre de récupérer la liste des tables et leurs propriétés, champs... Voir l'API de jDbSchema.
Exemples ¶
Voir les drivers pour mysql, postgresql etc dans le répertoire
lib/jelix/plugins/db/
.