Me pregunto por qué la gran mayoría crea una misma clase para la conexión y para las consultas... yo tengo estas dos clases que hice hoy para un proyecto, separando: Conexión a la BD y Querys a la BD.
Me gustaría saber sus opiniones... estoy hace poco con POO en PHP por lo que sus comentarios me podrían llegar a servir de mucho!
Un saludo grande
Código PHP:
class mysqldb_conexion {
/* variables de conexión */
var $BaseDatos;
var $Servidor;
var $Usuario;
var $Clave;
/* identificador de conexión y consulta */
var $Conexion_ID = 0;
/*********************** METODOS ***********************/
/* Constructor */
function mysqldb_conexion($bd = "", $host = "localhost", $user = "nobody", $pass = "") {
$this->BaseDatos = $bd;
$this->Servidor = $host;
$this->Usuario = $user;
$this->Clave = $pass;
}
/*Conexión a la base de datos*/
function conectar($bd = "", $host = "", $user = "", $pass = ""){
// Si ya existe una conexión abierta al intentar conectar, la cerramos.
if ($this->Conexion_ID != "0") {
$this->cerrar();
}
// Si me pasan valores, altero los valores globales de la clase con estos
if ($bd != "") $this->BaseDatos = $bd;
if ($host != "") $this->Servidor = $host;
if ($user != "") $this->Usuario = $user;
if ($pass != "") $this->Clave = $pass;
// Conectamos al servidor
$this->Conexion_ID = @mysql_connect($this->Servidor, $this->Usuario, $this->Clave) or die(mysql_error());
// Seleccionamos la base de datos
mysql_select_db($this->BaseDatos, $this->Conexion_ID) or die(mysql_error());
// Si todo salió bien, retornamos el ID de conexión (lo que antes usabamos como $link)
return $this->Conexion_ID;
}
/* Cerramos la conexion a la BD */
function cerrar() {
mysql_close($this->Conexion_ID);
$this->Conexion_ID = "0";
}
}
Código PHP:
class mysqldb_consulta {
/* Variables asociadas a consultas */
var $Consulta_ID = 0;
var $resultado;
var $conexion;
/* Flag para limpiar automaticamente los resultados cuando sea necesario */
var $qflag = 0;
/*********************** METODOS ***********************/
/* Recibimos una referencia hacia la instancia "conexión": Ahorramos memoría por un poquito más de CPU Time */
function mysqldb_consulta(&$conexion) {
if ($conexion != "") { $this->conexion = &$conexion; }
}
/* Realizamos un query a la base de datos */
function consulta($sql){
// Si la consulta es tipo "select", nos aseguramos de que se libere memoria.
if ( strtolower(substr($sql,0,6)) == "select") {
if ($this->qflag == 1) {
mysql_free_result($this->Consulta_ID);
$this->qflag = 0;
} else {
$this->qflag = 1;
}
}
// Ejecutamos la consulta
$this->Consulta_ID = @mysql_query($sql, $this->conexion->Conexion_ID) or die(mysql_error());
return $this->Consulta_ID;
}
/* Cargamos los resultados de la consulta en un ARRAY */
function get_array() {
$this->resultado = mysql_fetch_array($this->Consulta_ID) or die(mysql_error());
return $this->resultado;
}
/* Devuelve el nombre de un campo de una consulta */
function nombrecampo($numcampo) {
return mysql_field_name($this->Consulta_ID, $numcampo);
}
/* Devuelve el número de campos de una consulta */
function numcampos() {
return mysql_num_fields($this->Consulta_ID);
}
/* Devuelve el número de registros de una consulta */
function numrows() {
return mysql_num_rows($this->Consulta_ID);
}
/*
* Muestra una tabla con los resultados de la consulta.
* Esta función está pensada para utilizarse solo para testear
* consulas.
*
*/
function debug_results() {
echo "<table border=1>\n";
// mostramos los nombres de los campos
for ($i = 0; $i < $this->numcampos(); $i++){
echo "<td><b>".$this->nombrecampo($i)."</b></td>\n";
}
echo "</tr>\n";
// mostrarmos los registros
while ($row = mysql_fetch_row($this->Consulta_ID)) {
echo "<tr> \n";
for ($i = 0; $i < $this->numcampos(); $i++){
echo "<td>".$row[$i]."</td>\n";
}
echo "</tr>\n";
}
}
/* Mueve el índice de mi query-array hacia la posición $indice. */
function seek($indice) {
if ($this->Consulta_ID != 0) {
mysql_data_seek($this->Consulta_ID, $indice);
} else {
return 0;
}
}
/* Limpiamos los resultados de una consulta */
function free() {
if (qflag == 1) {
mysql_free_result($this->Consulta_ID);
$this->qflag = 0;
}
}
}