DB_QueryTool est un package moins connu que DB_DataObject.
DB_QueryTool propose une solution simple pour éviter de coder directement des requêtes SQL. Il permet de produire et d'exécuter du SQL à l'aide d'une classe unique.
La documentation officielle présente le package de telle manière que l'on a du mal à comprendre la différence avec DB_DataObject. Si on peut créer une classe pour chaque table de données, DB_QueryTool n'est sûrement pas le meilleur dans ce domaine. Il s'agit plus d'un QueryBuilder ou d'un SQLBuilder. Tentative de démonstration.
Couplage avec DB
DB_QueryTool peut gérer la connexion à la base de données, pour cela il utilise le package PEAR DB. Cependant on peut externaliser la gestion de la connexion :
require_once 'DB/QueryTool.php'; $dsn = 'sqlite:///home/thouveni/devel/testsets/france.sdb'; $options = array( 'debug' => 2, 'portability' => DB_PORTABILITY_ALL ); $db =& DB::connect($dsn, $options); if (PEAR::isError($db)) die($db->getMessage()); $dqt = new DB_QueryTool; $dqt->setDbInstance(&$db);
Choix d'une table
On peut comme cela est décrit dans la docuentation officielle créer une clase par table. Cependant, on peut très bien utiliser la classe générique ...
$dqt->setTable('departements');
Générer et exécuter des requêtes SQL de type SELECT
Voici une série d'exemple extrait des sources du package.ATTENTION : avant de rejouer une requête sur la même table il faut appler la méthode reset()
$dqt->reset(); // SELECT * FROM departement WHERE id=54 $res = $dqt->get(54); // SELECT * FROM user $res = $dqt->getAll(); // SELECT * FROM departement LIMIT 0,10 $res = $dqt->getAll(0,10); // SELECT * FROM region WHERE id>3 $dqt->setWhere('id>3'); $res = $user->getAll(); // SELECT * FROM region WHERE id_zone IS NOT NULL GROUP BY id_zone ORDER BY id_zone $user->setSelect('name'); $user->setWhere('name IS NOT NULL'); $user->setOrder('name'); $user->setGroup('name'); $res = $user->getAll();
Aucun commentaire:
Enregistrer un commentaire