Ver Mensaje Individual
  #46 (permalink)  
Antiguo 02/09/2010, 14:11
Avatar de neodani
neodani
 
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 8 meses
Puntos: 20
Respuesta: Duda con PDO y mi clase

Cita:
Iniciado por GatorV Ver Mensaje
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
  1. <?php
  2. /*
  3.     CLASE EXTENDIDA DE PDO:
  4.     - Cuenta el número de consultas que se realizan
  5.     - Utiliza la carga los datos de conexión desde la clase Config
  6. */
  7. class MyPDO extends PDO {
  8.     private $_username;
  9.     private $_password;
  10.     private $_host;
  11.     private $_db;
  12.     private $_conexion;
  13.     private $_dsn;
  14.     private $_queryCount = 0;
  15.    
  16.     public function __construct(Config $config)
  17.     {
  18.         $config_data = $config->getConfig();
  19.         $this->_username = $config_data['username'];
  20.         $this->_password = $config_data['password'];
  21.         $this->_host = $config_data['host'];
  22.         $this->_db = $config_data['db'];
  23.         $this->_dsn="mysql:host=$this->_host;dbname=$this->_db";
  24.        
  25.         parent::__construct($this->_dsn, $this->_username, $this->_password);
  26.     }
  27.    
  28.     public function query()
  29.     {
  30.         $this->_increaseQueryCount();
  31.         $args = func_get_args();
  32.        
  33.         return call_user_func_array(array('parent', 'query'), $args);
  34.     }
  35.    
  36.     public function prepare($statement, $driver_options = array())
  37.     {
  38.         $this->_increaseQueryCount();
  39.         return parent::prepare($statement, $driver_options);
  40.     }
  41.    
  42.     private function _increaseQueryCount()
  43.     {
  44.         $this->_queryCount++;
  45.     }
  46.    
  47.     public function getQueryCount()
  48.     {
  49.         return $this->_queryCount;
  50.     }
  51.     public function ResetCount()
  52.     {
  53.         $this->_queryCount = 0;
  54.     }
  55. }
  56. ?>

No se de qué manera hacer para controlar la excepción dentro de la clase Categoria()

Código PHP:
Ver original
  1. class Categoria{
  2.     private $_con;
  3.    
  4.     public function __construct($DbConexion){
  5.         try {
  6.             $this->_con=$DbConexion;
  7.             echo "Conectado a la base de datos<br/>";
  8.         }
  9.         catch(PDOException $e){
  10.             echo $e->getMessage();
  11.             echo "Falló la conexión a la base de datos<br/>";
  12.             exit;
  13.         }
  14.     }
  15.    
  16.     // Listar todas las categorias de la base de datos
  17.     public function listarCategorias(){
  18.         $query = "SELECT nombre FROM categorias";
  19.         $comando = $this->_con->prepare($query);
  20.         $comando->execute();
  21.  
  22.         while( $datos = $comando->fetch() ) {
  23.             echo $datos[0].'<br />';
  24.         }
  25.     }
  26. }

¿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
  1. //Cargo los datos del fichero .ini
  2. $config_slave = new Config('params_slave.ini');
  3. $config_master = new Config('params_master.ini');
  4.  
  5. //Creo el objeto de la base de datos
  6. $db_slave = new MyPDO($config_slave);
  7. $db_slave->setAttribute(MyPDO::ATTR_ERRMODE, MyPDO::ERRMODE_EXCEPTION);
  8. $db_master = new MyPDO($config_master);
  9. $db_master->setAttribute(MyPDO::ATTR_ERRMODE, MyPDO::ERRMODE_EXCEPTION);
  10.  
  11. //Guardo las instancias diferentes con Registry
  12. Registry::save('db_slave', $db_slave);
  13. Registry::save('db_master', $db_master);
  14.  
  15. //Recupero las instancias con Registry
  16. $db_slave=Registry::get('db_slave');
  17. $db_master=Registry::get('db_master');
  18.  
  19. // Creo el primer objeto el cual hace una conexion con la BBDD slave
  20. $cat= new Categoria($db_slave);
  21. $cat->listarCategorias();
  22. $cat->listarCategorias();
  23.  
  24. // Creo el segundo objeto el cual hace una conexion con la BBDD master
  25. $par= new Partidos($db_master);
  26. $par->listarPartidos();
  27.  
  28. // Cuenta el total de consultas que hubieron en cada BBDD
  29. echo "Consultas realizadas en BD Slave: ".$db_slave->getQueryCount()."<br/>";
  30. echo "Consultas realizadas en BD Master: ".$db_master->getQueryCount()."<br/>";