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

Cita:
Iniciado por atrianaster Ver Mensaje
Positivo a eso era a lo que me refería anteriormente usa $this para invocar al metodo Conectar(), que contiene una referencia al objeto actual.

Si quieres ver el contenido de $this puedes utilizar la función var_dump($this); o de lo contrario busca un IDE que te permita debugear, yo en particular utilizo Netbeans IDE

Saludos.
La clase ha quedado así, ya conecta con la base de datos pero no consigo ejecutar las consultas de la clase Categoria, puedes indicarme que estoy haciendo mal?

db.class
Código PHP:
Ver original
  1. <?php
  2. class db {
  3.     private $_username;
  4.     private $_password;
  5.     private $_host;
  6.     private $_db;
  7.     private $_conexion;
  8.    
  9.     public function __construct(Config $config)
  10.     {
  11.         $config_data = $config->getConfig();
  12.         $this->_username = $config_data['username'];
  13.         $this->_password = $config_data['password'];
  14.         $this->_host = $config_data['host'];
  15.         $this->_db = $config_data['db'];
  16.        
  17.         $this->Conectar();
  18.     }
  19.     private function Conectar(){
  20.         try {
  21.             $this->_conexion = new PDO("mysql:host=$this->_host;dbname=$this->_db", $this->_username, $this->_password);
  22.             /*** echo a message saying we have connected ***/
  23.             echo 'Connected to database';
  24.         }
  25.         catch(PDOException $e){
  26.             echo $e->getMessage();
  27.         }
  28.         return $this->_conexion;
  29.     }
  30. }
  31. ?>

ejemplo1.php
Código PHP:
Ver original
  1. <?php
  2. require('config_reader.php');
  3. require('db.php');
  4. require('registry.php');
  5.  
  6. class Categoria{
  7.     private $nombreCategoria;
  8.    
  9.     // Listar todas las categorias de la base de datos
  10.     public function listarCategorias($DbInstance){
  11.         $query = "SELECT nombre FROM categorias";
  12.         $comando = $DbInstance->prepare($query);
  13.         $comando->execute();
  14.  
  15.         while( $datos = $comando->fetch() ) {
  16.         // Imprimimos resultados
  17.         echo $datos[0].'<br />';
  18.         }
  19.     }
  20. }
  21.  
  22. //Cargo los datos del fichero .ini
  23. $config_slave = new Config('params_slave.ini');
  24. $config_master = new Config('params_master.ini');
  25. //Creo el objeto de la base de datos
  26. $db_slave = new db($config_slave);
  27. $db_master = new db($config_master);
  28. //Guardo las instancias diferentes con Registry
  29. Registry::save('db_slave', $db_slave);
  30. Registry::save('db_master', $db_master);
  31. //Recupero las instancias con Registry
  32. $db_slave=Registry::get('db_slave');
  33. $db_master=Registry::get('db_slave');
  34.  
  35. $cat= new Categoria();
  36. $cat->listarCategorias($db_slave);
  37.  
  38. ?>

Error que me da
Connected to databaseConnected to database
Fatal error: Call to undefined method db::prepare() in C:\wamp\www\00-laboratorio_test\secciones\class_categorias\Nueva\ ConectarCon2_BD\ejemplo1.php on line 13

La linea es esta
$comando = $DbInstance->prepare($query);

¿Estoy pasandole mal la instancia a la clase Categoria???