Bonjour à tous,
ayant un peu avancé cette classe de connexion, je viens dresser le bilan...
et pour le moment, tout semble coller...
donc un fichier d'index
<?php
//INCLUSIONS environnement de travail
//CONFIG includes
define('INCLUDES','includes/');
set_include_path(get_include_path().PATH_SEPARATOR.INCLUDES);
//CONFIG
require_once('config.inc');
$config['driver'] = DRIVER;
$config['dbname'] = DBNAME;
$config['host'] = HOST;
$config['user'] = USER;
$config['password'] = PASSWORD;
$config['dsn'] = $config['driver']
. ':dbname=' . $config['dbname']
. ';host=' . $config['host'];
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
//$connexion = dmde conexion
$connexion = Connexion::getConnexion($config);
var_dump($connexion);
?>
le fichier de config, config.inc, qui contient mes constantes et mes fichiers de classes à inclure avec un spl_autoload
ma classe Connexion
class Connexion
{
private static $_connexion = null;
private static $_instance = null;
//durée d'execution du script
private static $_startTime;
private static $_endTime;
private static $_time;
private function __construct($pConfig)
{
$config = $pConfig;
try
{
//dbt du script
self::$_startTime = round(microtime(), "6");
//connexion
self::$_connexion = new PDO($config['dsn'],$config['user'],$config['password']);
}
catch (PDOException $e)
{
throw new Exception('Erreur de connexion à la base de données ! <br /> Erreur détectée : '.$e->getMessage());
exit();
}
}
public static function getConnexion($pConfig)
{
if (is_null(self::$_connexion))
{
self::$_instance = new Connexion($pConfig);
}
return self::$_connexion;
}
public static function getTimeScriptConnexion()
{
//calcul du temps d'éxecution du script de connexion BDD en microsecondes
self::$_time = self::$_endTime - self::$_startTime;
self::$_time = round(self::$_time, "6");
$timeScript =
'<table border="1" cellspacing="0" cellpadding="5">
<th colspan=2 style="background:#cccccc">Temps du script
</th>
<tr>
<td style="background:#eeeeee">Début du script
</td>
<td>' . self::$_startTime . '
</td>
</tr>
<tr>
<td style="background:#eeeeee">Fin du script
</td>
<td>' . self::$_endTime . '
</td>
</tr>
<tr>
<td style="background:#eeeeee">Tps d\'éxecution total
</td>
<td>' . self::$_time . '
</td>
</tr>
</table>' ;
echo $timeScript ;
}
//"anti-cloning" (classe Singleton)
public function __clone()
{
}
/* 2nd type d'"anti-cloning" :
public function __clone()
{
throw new Exception('ERREUR DE MANIPULATION : Tentative de clônage de la classe Singleton Connexion !');
}
*/
//destructeur
public function __destruct()
{
//fin du script
self::$_endTime = round(microtime(), "6");
//tps de connexion
self::getTimeScriptConnexion();
if (!is_null(self::$_connexion))
{
self::$_connexion = null;
echo 'Connexion fermée.';
}
}
}
et ma classe Model, qui gère les demandes de base de données.
class Model
{
//propriété nom de la table
public $table;
//prefixe
public $prefId;
//$id pr delete
public $id;
//connexion Database
protected $_cnx;
//sql
private $_sql;
public function __construct($pCnx)
{
//vérif param de config
//var_dump($pCnx);
$this->_cnx=$pCnx;
}
//fction lecture champs BDD
public function lire($pId,$pChamps="*")
{
//champs : si pas de paramètre = *
$champs=(is_array($pChamps))? implode(',',$pChamps):$pChamps;
//prépare la requete
$this->_sql = 'SELECT '.$champs.' FROM '.$this->table.' WHERE '.$this->prefId.'id='.$pId;
echo $this->_sql;
try
{
//prépare & execute la requete
$stmt = $this->_cnx->prepare($this->_sql);
if($stmt->execute())
{
$infos=$stmt->fetch(PDO::FETCH_ASSOC);
}
if ($stmt->rowCount() === 1)
{
$this->id = $pId;
//récupération du tableau des données
print_r($infos);
return $infos;
}
else
{
return false;
}
}
catch(PDOException $e)
{
echo 'Erreur : '.$e->getMessage();
exit();
}
}
}
Comme vous le voyez, je suis revenu sur l'extends pdo... mais j'ai un constructeur du coup.
en gros, j'ai essayé de suivre les conseils qui me paraissaient les plus pertinents eut égard à ce que j'essaie de faire, et puis j'ai reprit un peu plus profondément les bases aussi parceque ce n'est pas évident.
Pour le moment, je n'ai fait qu'une fonction lire(), mais je vais approfondir plutôt avec une fonction trouver, sauvegarder, enregistrer ou modifier...
ça a l'air de marcher pas trop mal. Qu'en pensez-vous?
Modifié par ClR (18 Jul 2011 - 16:03)