Couche d'abstraction sgbd avec résultats orienté objet

Description

Bonjour à tous
Une nouvelle mise à jour de la couche d'abstration à une DB.
Je vous indiquerai les modifications plus bas :)
Dans l'idée, il y a deux classes, celle de base, DB (abstract), et DBResults.
Quand vous faites un query (query, unbufferedQuery, multipleQuery, arrayQuery, objectQuery), le résultat de la requete est placé dans une nouvelle instance de la classe DBResults, qui est retourné.
Du coup, vous pouvez traiter le résultat indépendament de la classe, ce qui fait que vous pouvez faire différent query.
La méthode singleQuery, quant à elle, execute une requete uniquement de type 'action' (voir la methode isAnAction dans la classe DB) (cad autre que SHOW, EXPLAIN, DESCRIBE, SELECT).

Source / Exemple :


<?php
// On inclut les différents fichiers :
require_once ('genericException/genericException.class.php'); // Gestion des exceptions
require_once ('factory/factory.class.php'); // Factory (utilisée par dbConnector, donc nécéssaire !)
require_once ('db/dbConnector.class.php'); // Le connector (on peux aussi juste utiliser la factory)

$sCon = array ("mysql://root:passwd@127.0.0.1/dbName",
				"pgsql://root:passwd@127.0.0.1/dbName",
				"mssql://root:passwd@127.0.0.1/dbName");
// Différentes possibilités

// On crée l'instance de la base de donnée :
try {
	$oDb = dbconnector::connect ($sCon, 'db', false, dbConnector::LOAD_BALANCING); // Load balancing ?
	// On peux aussi utiliser dbConnector::FAIL_OVER (par défaut !)
}
catch (dbConnectorException $e) {
	echo "Oups ! :)";
}
catch (factoryException $e) {
	echo "Oups ! I did it again .... ?";
}
catch (... etc) {

}

// Maintenant on peux faire beaucoup de choses avec
// Comme faire mumuse en objet :
echo $oDb->query('requete')->fetchObject->NomColonne;

// Maintenant, il est aussi possible de faire
$QueryObject = $oDb->query('requete');
print_r ($QueryObject->fetchAll ()); // pour tout avoir
$QueryObject->rewind ();
$QueryObject->next ();
while ($QueryObject->valid ()) {
echo $QueryObject->column ('NOM ou INDEX de la colonne en cours');
// ou
$var = $QueryObject->current ();
echo $var['NOM ou INDEX de la colonne en cours'];
}
#
// la fonction prepare permet de préparer et parser une requete afin qu'elle soit prete a etre executée, exemple :
$sQuery = $oDb->prepare ('SELECT nom, prenom, login, passwd FROM §1user WHERE login=§2 AND passwd=§3', $TablePrefix, $LoginUser, $PasswdUser);
$QueryObject = $oDb->query ($sQuery);
#
#
// Bien sur, les méthodes de bases existes aussi, tel que (dans la classe DB):
/*
lastInsertRowid
lastInsertId
changes (= affected_rows)
query
singleQuery
unbufferedQuery
multipleQuery
arrayQuery
objectQuery

  • /
// Et voici les méthodes de la classe DBResults: /* fetch fetchObject fetchSingle fetchAll freeResult column numFields numRows
  • Ainsi que les éléments implémentés de la classe Iterator, Seekable et countable
  • /
?>

Conclusion :


De grosses mises à jours ont été faites.

Le groupement de classes supporte maintenant la connection sur des serveurs dispatchés, en LOAD BALANCING ou FAIL OVER.
Elle supporte MySQL, PostGreSQL, MsSQL et d'autres bientots ;)

Et comme toujours : Correction de bugs, amélioration du code, optimisation, danse avec le ptit chat, etc :)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.