Buenas, vuelvo al ataque.
Tengo una clase base para la conexion a la db y las funciones tipicas (query, free, num rows, ..).
He hecho una segunda clase, que herede de ella, y que contiene las funciones que mi aplicacion web hara contra la db.
El caso es que yo uso mi clase y no da error al conectar, se crea el LINK perfectamente, pero cuando llamo a mis funciones, parece que el LINK esta vacio (entendiendo como LINK el resultado de ejecutar mysql_connect.)
class.DBAccess.php
class DBAcces
{
// Config
private $_cfg;
// DB Oject
private $_dbi;
public function GetCfg() { return $this->_cfg; }
//
// Constructor
//
public function __construct($_cfg) { $this->_cfg = $_cfg; }
public function Connect()
{
// Intentar conectar
$this->_dbi = mysql_connect(
$this->_cfg->dbhost,
$this->_cfg->dbuser,
$this->_cfg->dbpw)
or die("Unable to connect to DataBase.");
if(!$this->_dbi) die("Connection Failed");
// Seleccionar la base de datos
mysql_select_db($this->dbname, $this->_dbi);
var_dump($this->_dbi);
}
public function Disconnect()
{
mysql_close($this->_dbi);
}
//
// Envia una consulta SQL a la DB y devuelve el resultado
//
public function Query($query)
{
$res = mysql_query($query, $this->_dbi);
return $res;
}
// Devuelve el numero de filas del resultado
public function NumRows($res)
{
return mysql_num_rows($res);
}
//
// Devuelve las filas del resultado como una matriz asociada.
//
public function FetchArray($res)
{
return mysql_fetch_array($res);
}
//
//Devuelve las filas del resultado como una matriz
//
public function FetchRow($res)
{
$rows = mysql_fetch_row($res);
return $rows;
}
//
// Devuelve el numero de filas afectadas por la ultima operacion MySQL
//
public function AffectedRows()
{
$res = mysql_affected_rows();
return $res;
}
//
// Libera la memoria utilizada para realizar una consulta
//
public function FreeResult($res)
{
mysql_free_result($res);
}
}
class.DBLibrary.php
class DBLibrary extends DBAcces
{
public function __construct($config)
{
// Instanciar la clase Base
parent::__construct($config);
}
//
// Devuelve un boolean indicando si el usuario es correcto
//
public function UserLogin($name, $pw)
{
// Get
$query = "SELECT id FROM users WHERE name='" .$name. "' and pw='" .$pw."'";
$res = $this->Query($query);
//Check
$logged = ($this->NumRows($res) == 1);
if ($logged != false)
{
$query_resut = $this->FetchArray($res);
$logged = $query_resut['id'];
}
// Return
$this->FreeResult($res);
return $logged;
}
}
index.php
$db = new DBLibrary($cfg);
$db->Connect();
$action = 'nav';
if ( isset( $get['action'] ) ) $action = $get['action'];
// Se viene de un formulario con esos valores.
if ($action == 'login')
{
$db->UserLogin($post['theName'],$post['thePw'],$post['thAlg'],$post['theKey']);
}
Resultado:
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:...\includes\class.DBAcces.php on line 43
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:#...\includes\class.DBAcces.php on line 50
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:...\includes\class.DBAcces.php on line 84
Alguna idea?