Cita:
Iniciado por GatorV Así es, aunque como tip, yo no manejaría la excepcion de conectar dentro de tu clase DB, se la dejaría a la clase donde la implementas para que tengas un mejor control del flujo de tu aplicación.
Saludos.
Es decir, dentro de cada clase que implemente, en este ejemplo Categorias() y Partidos()?
La clase
MyPDO.class.php la dejarías así??
Código PHP:
Ver original<?php
/*
CLASE EXTENDIDA DE PDO:
- Cuenta el número de consultas que se realizan
- Utiliza la carga los datos de conexión desde la clase Config
*/
class MyPDO extends PDO {
private $_username;
private $_password;
private $_host;
private $_db;
private $_conexion;
private $_dsn;
private $_queryCount = 0;
public function __construct(Config $config)
{
$config_data = $config->getConfig();
$this->_username = $config_data['username'];
$this->_password = $config_data['password'];
$this->_host = $config_data['host'];
$this->_db = $config_data['db'];
$this->_dsn="mysql:host=$this->_host;dbname=$this->_db";
parent::__construct($this->_dsn, $this->_username, $this->_password);
}
public function query()
{
$this->_increaseQueryCount();
}
public function prepare
($statement, $driver_options = array()) {
$this->_increaseQueryCount();
return parent::prepare($statement, $driver_options);
}
private function _increaseQueryCount()
{
$this->_queryCount++;
}
public function getQueryCount()
{
return $this->_queryCount;
}
public function ResetCount()
{
$this->_queryCount = 0;
}
}
?>
No se de qué manera hacer para controlar la excepción dentro de la clase Categoria()
Código PHP:
Ver originalclass Categoria{
private $_con;
public function __construct($DbConexion){
try {
$this->_con=$DbConexion;
echo "Conectado a la base de datos<br/>";
}
catch(PDOException $e){
echo $e->getMessage();
echo "Falló la conexión a la base de datos<br/>";
}
}
// Listar todas las categorias de la base de datos
public function listarCategorias(){
$query = "SELECT nombre FROM categorias";
$comando = $this->_con->prepare($query);
$comando->execute();
while( $datos = $comando->fetch() ) {
echo $datos[0].'<br />';
}
}
}
¿Puedes indicarme?
Muchas gracias de antemano!
PD: pongo el ejemplo para que se vea de donde sale el parametro que le paso a la clase...
Código PHP:
Ver original//Cargo los datos del fichero .ini
$config_slave = new Config('params_slave.ini');
$config_master = new Config('params_master.ini');
//Creo el objeto de la base de datos
$db_slave = new MyPDO($config_slave);
$db_slave->setAttribute(MyPDO::ATTR_ERRMODE, MyPDO::ERRMODE_EXCEPTION);
$db_master = new MyPDO($config_master);
$db_master->setAttribute(MyPDO::ATTR_ERRMODE, MyPDO::ERRMODE_EXCEPTION);
//Guardo las instancias diferentes con Registry
Registry::save('db_slave', $db_slave);
Registry::save('db_master', $db_master);
//Recupero las instancias con Registry
$db_slave=Registry::get('db_slave');
$db_master=Registry::get('db_master');
// Creo el primer objeto el cual hace una conexion con la BBDD slave
$cat= new Categoria($db_slave);
$cat->listarCategorias();
$cat->listarCategorias();
// Creo el segundo objeto el cual hace una conexion con la BBDD master
$par= new Partidos($db_master);
$par->listarPartidos();
// Cuenta el total de consultas que hubieron en cada BBDD
echo "Consultas realizadas en BD Slave: ".$db_slave->getQueryCount()."<br/>";
echo "Consultas realizadas en BD Master: ".$db_master->getQueryCount()."<br/>";