composants database - yamsuz/damix GitHub Wiki
- Les bases de données **
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.
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>
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 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 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 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 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();
DbResultSet est l'objet que vous récupérer lorsque vous effectuer une requête renvoyant un résultat.
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 . ' - ';
}
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.
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();
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();
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();
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();
}