Ver Mensaje Individual
  #15 (permalink)  
Antiguo 30/08/2010, 16:35
Avatar de neodani
neodani
 
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 9 meses
Puntos: 20
Respuesta: Duda con PDO y mi clase

GatorV,

Ya tengo los 4 ficheros

config_reader.php

Código PHP:
Ver original
  1. <?php
  2. class Config
  3. {
  4.     private $_config;
  5.     public function __construct($sFile)
  6.     {
  7.         if (!file_exists($sFile)) {
  8.             throw new Exception("Can't find file: $sFile");
  9.         }
  10.        
  11.         $this->_config = parse_ini_file($sFile);
  12.     }
  13.    
  14.     public function getConfig()
  15.     {
  16.         return $this->_config;
  17.     }
  18. }
  19. ?>

db.php

Código PHP:
Ver original
  1. <?php
  2. class db {
  3.     private $_username;
  4.     private $_password;
  5.     private $_host;
  6.     private $_db;
  7.    
  8.     public function __construct(Config $config)
  9.     {
  10.         $config_data = $config->getConfig();
  11.         $this->_username = $config_data['username'];
  12.         $this->_password = $config_data['password'];
  13.         $this->_host = $config_data['host'];
  14.         $this->_db = $config_data['db'];
  15.     }
  16. }
  17. ?>

registry.php

El código que publicó el compañero atrianaster

y

params.ini

Código:
username = "root"
password = "jupiter"
host = "localhost"
db = "codelab"
Por último, el fichero donde los llamo (tuve que cambiar tu ejemplo de función "set" por la que definió atrianaster "add", imagino que es lo mismo.

Código PHP:
Ver original
  1. <?php
  2. require('config_reader.php');
  3. require('db.php');
  4. require('registry.php');
  5.  
  6. $config = new Config('params.ini');
  7. $db = new db($config);
  8. Registry::add('db', $db);
  9.  
  10. ?>

¿Ahora cómo juego con todo esto?... entiendo que haciéndolo de esta forma evitamos el usar el patrón singleton, esto nos proporciona la ventaja de que ahora sea posible conectarse a diferentes bases de datos desde el mismo script.
Ej. la base de datos master donde solo se escribiría, y la slave donde solo se harían lecturas, correcto?

Dentro de la clase db (fichero db.php) debería crear un nuevo método que fuese la conexión con PDO, así verdad?

Código PHP:
Ver original
  1. public function Conectar(){
  2.         try {
  3.             $dbh = new PDO("mysql:host=$this->_host;dbname=$this->_db", $this->_username, $this->_password);
  4.             /*** echo a message saying we have connected ***/
  5.             echo 'Connected to database';
  6.         }
  7.         catch(PDOException $e){
  8.             echo $e->getMessage();
  9.         }
  10.     }

Y en el ejemplo/llamada hacer:

Código PHP:
Ver original
  1. <?php
  2. require('config_reader.php');
  3. require('db.php');
  4. require('registry.php');
  5.  
  6. $config = new Config('params.ini');
  7. $db = new db($config);
  8. Registry::add('db', $db);
  9. $db->Conectar();
  10. ?>

De forma que a partir de ese momento, seguiría utilizando la clase db normalmente y solo utilizaría el Registry::add(....) para hacer el paso previo a la conexión, todo bien hasta aquí? :S Debo de volverlo a utilizar en alguna ocasión más por si quiero hacer una consulta a la otra base de datos?

Gracias de antemano!

Última edición por neodani; 30/08/2010 a las 16:40