composants database - yamsuz/damix GitHub Wiki

    • Les bases de données **

Table of Contents

API Database

Damix possède un système d'accès aux bases de données "\damix\engines\databases\Db". Cette API vous propose un ensemble de fonctionnalité afin d'effectuer des requêtes sur toutes les bases de données :

  * mariadb
  * pgsql

Cette API vous permet d'exécuter directement le code SQL sans le modifier.

Profil et configuration

La configuration se trouve dans le fichier [...]\var\config\profile.cfg.xml.

La section database doit comporter la configuration default avec le nom du profil par défaut. Le profil doit être correctement renseigné en fonction des paramètres de votre connexion à votre base

<?xml version="1.0" encoding="UTF-8"?> <compiler version="1.0" driver="config"> <section name="database"> <config name="default" value="myprofil"/> </section> <section name="myprofil"> <config name="driver" value="mariadb"/> <config name="database" value="myDB"/> <config name="host" value="localhost"/> <config name="port" value="3306"/> <config name="user" value="root"/> <config name="password" value=""/> <config name="persistent" value="on"/> <config name="force_encoding" value="on"/> <config name="charset" value="UTF8"/> </section> <section name="myprofil2"> <config name="driver" value="mariadb"/> <config name="database" value="myDB2"/> <config name="host" value="localhost"/> <config name="port" value="3306"/> <config name="user" value="root"/> <config name="password" value=""/> <config name="persistent" value="on"/> <config name="force_encoding" value="on"/> <config name="charset" value="UTF8"/> </section> <section name="myprofil3"> <config name="driver" value="pgsql"/> <config name="database" value="myDB2"/> <config name="host" value="localhost"/> <config name="port" value="5432"/> <config name="user" value="root"/> <config name="password" value=""/> <config name="persistent" value="on"/> <config name="force_encoding" value="on"/> <config name="charset" value="UTF8"/> </section> </compiler>
Exécution des requêtes

\damix\engines\databases\DbConnection

L'objet DbConnection vous permet d'accéder aux bases de données.

la fonction getConnection vous permet de récupérer l'instance en cours de la connexion $cnx = \damix\engines\databases\Db::getConnection();

Vous pouvez y passer un paramètre "myprofil2" par exemple vous permettant d'accéder au profil de ce nom $cnx = \damix\engines\databases\Db::getConnection('myprofil2');

query

query vous permet d'effectuer des requêtes avec des résultats, vide ou pas (SELECT ou procédures stockées). La méthode renvoi un "\damix\engines\databases\DbResultSet" $cnx = \damix\engines\databases\Db::getConnection(); $result = $cnx->query( 'select * from maTable' ); $mesResultats = $result->fetchAll();

executeNonQuery

executeNonQuery vous permet d'effectuer des requêtes ne renvoyant pas de résultat (INSERT, UPDATE, DELETE). La méthode renvoi le nombre de résultat impacté sous forme d'entier ou de chaine de caractère en fonction du nombre de caractère $cnx = \damix\engines\databases\Db::getConnection(); $cnx->executeNonQuery("insert into maTable (champ1, champ2) values ('val1', 'val2')");

quote

quote vous permet de protéger les valeurs passées dans la requête sql.

$cnx = \damix\engines\databases\Db::getConnection(); $cnx->exec("insert into agence (code, libelle) values (". $cnx->quote("maChaine'protege") .", 'val2')");

execute

execute vous permet d'exécuter des requêtes préparées $cnx = \damix\engines\databases\Db::getConnection(); $cnx->prepare( 'insert into maTable (champ1, champ2) values (?, ?)' ); $cnx->bindString( 'val1' ); $cnx->bindString( 'val2' ); $cnx->execute();

\damix\engines\databases\DbResultSet

DbResultSet est l'objet que vous récupérer lorsque vous effectuer une requête renvoyant un résultat.

Les itérations

Les résultats sont obligatoirement mis sous forme d'objet.

Cet objet vous permet de boucler dessus $cnx = \damix\engines\databases\Db::getConnection(); $liste = $cnx->query( 'select maColonne from maTable' ); $result = ''; foreach( $liste as $info ) { $result .= $info->maColonne . ' - '; }

fetch

L'objet implémente également une fonction fetch qui vous permet de vous renvoyer un objet correspondant au record suivant de la base de données. $cnx = \damix\engines\databases\Db::getConnection(); $liste = $cnx->query( 'select * from maTable' ); if( $result = $liste->fetch() ) { $out = $result->code; }

Il vous est possible de boucler afin de lire l'ensemble des résultats.

fetchAll

L'objet implémente une fonction fetchAll vous permettant de récupérer l'ensemble des données sous forme de tableau. $cnx = \damix\engines\databases\Db::getConnection(); $liste = $cnx->query( 'select * from maTable' ); $out = $liste->fetchAll();

rowCount

L'objet implémente une fonction rowCount vous permettant de récupérer le nombre de résultat $cnx = \damix\engines\databases\Db::getConnection(); $liste = $cnx->query( 'select * from maTable' ); $result = $liste->rowCount();

columnCount

L'objet implémente une fonction columnCount vous permettant de récupérer le nombre de colonne $cnx = \damix\engines\databases\Db::getConnection(); $liste = $cnx->query( 'select * from maTable' ); $result = $liste->columnCount();

Les transactions

L'API vous permet de faire des transactions à condition que le driver les supporte.

Afin de démarrer une transaction, il vous suffit d'utiliser la méthode "beginTransaction()". Ensuite si vous désirez valider l'ensemble des requêtes vous utiliserez "commit()". En cas d'annulation de la transaction, vous pouvez utiliser "rollback()" $cnx = \damix\engines\databases\Db::getConnection(); $cnx->beginTransaction(); try { $cnx->exec(...); $cnx->query( ... ); $cnx->commit(); } catch (Exception $e) { $cnx->rollback(); }

Schéma et autres outils
⚠️ **GitHub.com Fallback** ⚠️