Cita:
Iniciado por atrianaster @Neodani invoca al método Conectar() dentro del constructor de la clase db y utiliza Registry a para que te devuelva las instancias creadas anteriormente.
Entiendo pues que efectivamente no hay que juntar el patron Registry con el singleton dentro de la clase db.
En el siguiente ejemplo intento conectarme a dos bases de datos diferentes y mostrar el contenido de una columna. Consigo que se conecte a las dos bases de datos pero a la hora de listar no acaba de funcionar.
Código PHP:
Ver original<?php
class db {
private $_username;
private $_password;
private $_host;
private $_db;
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'];
try {
$dbh = new PDO("mysql:host=$this->_host;dbname=$this->_db", $this->_username, $this->_password);
/*** echo a message saying we have connected ***/
echo 'Connected to database';
}
catch(PDOException $e){
echo $e->getMessage();
}
}
}
?>
Código PHP:
Ver original<?php
require('config_reader.php');
require('db.php');
require('registry.php');
class Categoria{
private $nombreCategoria;
// Listar todas las categorias de la base de datos
public function listarCategorias($db){
$query = "SELECT nombre FROM categorias";
$comando = $db->prepare($query);
$comando->execute();
while( $datos = $comando->fetch() ) {
// Imprimimos resultados
echo $datos[0].'<br />';
}
}
}
//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 db($config_slave);
$db_master = new db($config_master);
//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_slave');
$cat= new Categoria();
$cat->listarCategorias($db_slave);
?>
La salida por pantalla del error es:
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 29
Falla esta linea de la clase Categoria():
$comando = $db->prepare($query);
No puedo llamarlo de esta forma dentro de la clase categoria? incluso he intentado pasarle la instancia de la conexión por parametro pero da error.
¿Qué puede estar pasando?
Gracias de antemano!