Hola,
Tu clase se ve bien pero tengo algunos aportes:
1.- Deberías implementar el patrón
singleton para asegurar que siempre vas a tener una única instancia de la clase evitando la creación de objetos pertenecientes, además podrás hacer uso de ella en cualquier parte de tu aplicación sin la necesidad de abrir más de una conexion a la base de datos.
2.- Tu clase la deberías de dividir en dos una para la conexión y otra para el manejo del resultado(ResultSet).
3.- Implementar clase Factory para tener adapters (uno para cada motor de base de datos, mysql, oracle, mssql, etc)
Ejemplo Sencillo:
Clase DB (MYSQL)
Código PHP:
class MySQL
{
private static $_instance = NULL;
private $conId;
private $host;
private $user;
private $password;
private $database;
/***************************************************/
/* <SINGLETON> */
/***************************************************/
static public function getInstance(array $param_db)
{
if (self::$_instance == NULL)
{
self::$_instance = new self($param_db);
}
return self::$_instance;
}//fin getInstance
/***************************************************/
/* </SINGLETON> */
/***************************************************/
public function __construct(array $options=array())
{
if(count($options)<4)
{
throw new Exception('Invalid number of connection parameters');
}
foreach($options as $parameter=>$value)
{
if(!$value)
{
throw new Exception('Invalid parameter'.$parameter);
}
$this->{$parameter} = $value;
}
$this->connectDB();
}
// connect to database
private function connectDB()
{
if(!$this->conId=mysql_connect($this->host,$this->user,$this->password))
{
throw new Exception('Error connecting to the server');
}
if(!mysql_select_db($this->database,$this->conId))
{
throw new Exception('Error selecting database');
}
}
// run query
public function query($query)
{
if(!$this->result=mysql_query($query,$this->conId))
{
throw new Exception('Error performing query'.$query);
}
return new Result($this,$this->result);
}
}
Clase Result:
Código PHP:
class Result
{
private $mysql;
private $result;
public function __construct(MySQL $mysql, $result)
{
$this->mysql=$mysql;
$this->result=$result;
}
// fetch row
public function fetchAll()
{
//return mysql_fetch_assoc($this->result);
$rows = array();
while ($row = mysql_fetch_array( $this->result, MYSQL_ASSOC )) {
array_push($rows, $row);
}
return $rows;
}
// count rows
public function countRows()
{
if(!$rows=mysql_num_rows($this->result)){
throw new Exception('Error counting rows');
}
return $rows;
}
// count affected rows
public function countAffectedRows()
{
if(!$rows=mysql_affected_rows($this->mysql->conId)){
throw new Exception('Error counting affected rows');
}
return $rows;
}
// get insert ID
public function getInsertID()
{
if(!$id=mysql_insert_id($this->mysql->conId)){
throw new Exception('Error getting ID');
}
return $id;
}
// seek rows
public function seekRow($row=0)
{
if(!int($row)||$row<0){
throw new Exception('Invalid result set offset');
}
if(!mysql_data_seek($this->result,$row)){
throw new Exception('Error seeking data');
}
}
// return result set
public function getResult()
{
return $this->result;
}
}
Clase Factory (
Patrón Factory):
Código PHP:
class Db_Factory
{
// The factory method
public static function &factory($type, $param_db)
{
if (class_exists($type, false))
{
$classname = call_user_func( array($type, 'getInstance'),$param_db );
//$classname = MySQL::getInstance($param_db);
return $classname;
} else {
throw new Exception ('Driver not found');
}
}
}
¿Cómo se usa?
Código PHP:
try
{
// connect to MySQL
$param_db = array( 'host'=>'localhost',
'user'=>'user',
'password'=>'password',
'database'=>'mibd');
$db = Db_Factory::factory('MySQL',$param_db);
// get result set
$result = $db->query('SELECT * FROM posters');
foreach ($result->fetchAll() as $row)
{
print $row['id']."<br />";
print $row['username']."<br />";
print $row['email']."<br />";
}
//print_r($result->fetchAll());
//var_dump($result->fetchAll());
} catch(Exception $e) {
echo $e->getMessage();
exit();
}
Te recomiendo
PDO para desarrollar tu clase de abstracción de base de datos, en ves de las funciones de mysql, por un millon de razones, 100% OOP, mucho mejor rendimiento, PHP5 et....
saludos.