Buenas a todo el mundo,
recientemente me acabo de inciar en la programación con Php, hasta ahora habíamos estado trabajando con .Net y tengo una serie de dudas que no se muy bien como resolver.
En concreto es sobre bases de datos, tenemos una pequeña aplicación que utiliza diversas bases de datos, para conectar a cada una de ellas usamos una clase, que se compone de lo siguiente:
Código PHP:
<?php
class Conbd {
public static $conlocal = NULL;
private $result = NULL;
private $server = 1; // 0 == abajo, 1 == arriba
public function __construct() {
if (is_null(self::$conlocal)) {
if ($this->server == 0) $password = ''; else $password = 'elquesea';
self::$conlocal = mysql_connect('localhost', 'usuario', $password);
if (!self::$conlocal) die('No se pudo conectar a la base de datos: ' . mysql_error());
if (!mysql_select_db('base_de_datos',self::$conlocal)) die('No se pudo seleccionar la base de datos: ' . mysql_error());
}
return self::$conlocal;
}
public function fetchArray(){
return mysql_fetch_array($this->result);
}
public function fetchAssoc() {
return mysql_fetch_assoc($this->result);
}
public function freeResult() {
mysql_free_result($this->result);
}
public function insertId() {
return mysql_insert_id(self::$conlocal);
}
public function numRows(){
return mysql_num_rows($this->result);
}
public function sqlExec($sql){
$this->result = mysql_query($sql,self::$conlocal);
if (!$this->result) die('No se pudo ejecutar consulta: ' . mysql_error());
}
public function close(){
mysql_close(self::$conlocal);
$this->freeResult($this->result);
unset($this->result);
}
}
?>
La segunda clase es para la otra base de datos es:
Código PHP:
<?php
class Conbd_elastix {
private static $conelastix = NULL;
private $result = NULL;
private $server = 1; // 0 == abajo, 1 == arriba
public function __construct() {
if (is_null(self::$conelastix)) {
if ($this->server == 0) $password = ''; else $password = 'elquesea';
self::$conelastix = mysql_connect('localhost', 'usuario', $password);
if (!self::$conelastix) die('No se pudo conectar a la base de datos: ' . mysql_error());
if (!mysql_select_db('base_de_datos2',self::$conelastix)) die('No se pudo seleccionar la base de datos: ' . mysql_error());
}
return self::$conelastix;
}
public function fetchArray(){
return mysql_fetch_array($this->result);
}
public function fetchAssoc() {
return mysql_fetch_assoc($this->result);
}
public function freeResult() {
mysql_free_result($this->result);
}
public function insertId() {
return mysql_insert_id(self::$conelastix);
}
public function numRows(){
return mysql_num_rows($this->result);
}
public function sqlExec($sql){
$this->result = mysql_query($sql,self::$conelastix);
if (!$this->result) die('No se pudo ejecutar consulta: ' . mysql_error());
}
public function close(){
mysql_close(self::$conelastix);
$this->freeResult($this->result);
unset($this->result);
}
}
?>
Hasta aquí todo correcto, en mi "index.php" referencio las clases así:
Código PHP:
require_once "includes/Conbd.php";
require_once "includes/Conbd_elastix.php";
$conlocal = new Conbd();
$centralita = new Conbd_elastix();
Luego, si por ejemplo quiero ejecutar una porción de código que usa datos de las dos bases de datos, hago esto:
Código PHP:
$sql = "Select * From clientes Where id='".$_GET["id"]."';";
$conlocal->sqlExec($sql);
while($row = $conlocal->fetchAssoc()) {
$dato = $row["dato1"];
// Aquí saco datos de la otra base de datos
$sql = "Select * From clientes2 Where id='".$_GET["id"]."';";
$centralita->sqlExec($sql);
while($row1 = $centralita->fetchAssoc()) {
$dato2 = $row1["dato2"];
}
}
El fallo se produce exactamente en el punto en el que intento sacar datos de la segunda base de datos, me escupe:
"table base_de_datos2.clientes2" doesn't exist"
Como si estuviese sacando los datos de $conlocal en vez de $centralita, ¡¡Cuando eh referenciado hacia la conexión de centralita!!
Creo que debe de haber un problema de herencias en las clases o algo similar porque es como si estuviesen compartiendo las conexiones, no lo acabo de entender la verdad...
Me tiene loco, y no sé que hacer, ¿alguien de ustedes me podría ayudar?
Gracias!!