Decidí publicar algo que me a ayudado de base para mis programas en PHP orientados a objetos, y esto es el conector con la base de datos. Este objeto tiene la ventaja de que crea la conexión cuando se requiere y cierra la misma una vez terminada las consultas. Si la combinamos con la función autoload(), creo que obtenemos un buen componente para nuestra aplicación.
<blockquote>
<pre><span style="color: #999999;">// Conector a la base de datos
class conector {
protected $conexion;
protected $servidor, $usuario, $contrasena, $bd:
protected $comprueba=false;
public $array=array();
// Se inicia esta funcion cuando se construye la clase
public function __construct(){
$args = func_get_args();
if(empty($args)){ // Si no hay parametros usa la configuracion por default
$this->servidor = SERVIDOR;
$this->usuario = USUARIO;
$this->contrasena = CONTRASENA;
$this->bd = BD;
}elseif($args[1]==NULL){ // Le un archivo enviado como unico parametro
if(file_exists($args[0])){
set_include_path(directorio());
include_once($args[0]);
$this->servidor = SERVIDOR;
$this->usuario = USUARIO;
$this->contrasena = CONTRASENA;
$this->bd = $args[0];
}else{
error("No se encontro el archivo para la conexion de la clase <i>mysql</i>");
break;
}
}elseif($args[3]!=NULL){ // Se envian 4 parametros [host,base de datos,usuario,constraseña]
$this->servidor = $args[0];
$this->bd = $args[1];
$this->usuario = $args[2];
$this->contrasena = $args[3];
}else{
error("Forma incorrecta de llamar el constructor de conexion de la clase <i>conector</i>");
break;
}
$this->conectar();
}
// Crea la conexion a la base de datos
private function conectar(){
if($this->comprueba){
$this->conexion = @mysql_connect($this->servidor,$this->usuario,$this->contrasena)
or die(error("Imposible conectarse al servidor <i>$this->servidor</i> con los datos
[usuario:<i>$this->usuario</i>] [contraseña:<i>$this->contrasena</i>]"));
@mysql_select_db($this->bd, $this->conexion) or die (error("No se encontro la base
de datos [<i>$this->bd</i>]"));
$this->comprueba=true;
}
}
// Cierra cualquier conexion a base de datos que el objeto pueda tener
public function __sleep(){
@mysql_close($this->conexion);
}
// Reestablecer cualquier conexion a base de datos que se pueda haber perdido
public function __wakeup(){
$this->conectar();
}
// Lista las tablas disponibles
public function tablas(){
$i=0;
$a=@mysql_list_tables($this->bd);
while($row=mysql_fetch_row($a))
$array[$i++]=$row[0];
return $array;
}
// Lista de los campos
public function campos($variable){
$i=0;
$a = @mysql_query("SHOW COLUMNS FROM ".$variable);
if (@mysql_num_rows($a) > 0)
while ($row = @mysql_fetch_assoc($a))
$array[$i++]=$row;
else
error('La tabla no contiene campos');
return $array;
}
Ahora tratare de explicar como se usa el objeto: Crear objeto conector:
$objeto = new conector( ['localhost','base_datos','usuario','password'] )
</span><span><span style="color: #999999;">
Para mandar llamar a la clase, se debe tener en cuenta los tres métodos para inicial la conexión a la base de datos que tiene la clase. El primero no lleva ningún parámetro y se hace tal y como se muestra en el ejemplo. Los parámetros para esta conexión son tomados directamente de un archivo de configuracion que tendra definidas las variables: SERVIDOR, BD, USUARIO y CONTRASENA.
$objeto = new conector();</span></pre>
</blockquote>
También se pueden incluir parámetros, estos son 4 y serian [host,base de datos,usuario,constraseña], de esta manera puedes conectarte a múltiples bases de datos o servidores, con diferentes objetos.
<blockquote>
<pre><span style="color: #999999;">[sourcecode language='sql']
$objeto1 = new conector('127.0.0.1','base','usuario','clave'); // se conecta un servido
$objeto2 = new conector('255.1.1.2','otra_base','usuario2','clave2'); // se conecta a otro servidor
</span><span><span style="color: #999999;">
Recordemos que la clase maneja las conexiones, por lo cual abre y cierra las conexiones automáticamente optimizando así los recursos del servidor.
Ademas contiene dos funciones, una para ver las tablas, y otra para ver los campos de las tablas.
$objeto1->tablas();</span></pre>
<pre><span style="color: #999999;">$objeto1->campos($nombre_tabla);
</span><span><span style="color: #999999;">
Nota [010108]: Se agrego una comprobación de la conexión, por sugerencia del Ddaz.
Hey, encontré este post navegando, y aunque es algo tarde, hay algo que no entiendo:
set_include_path (directorio());
directorio()… ¿es una función definida en algún sitio? ¿un error tipográfico?
Un saludo!! fabi(Seleccionar comentario)
Efectivamente directorio() es una función definida en algún otro sitio ¿donde? ni yo me acuerdo, la cuestión es que la función directorio() traía la variable global de la ubicación del archivo de conexión.
seria algo así como:
function directorio() {
return “/root/html/directoriopath/”;
} Antioroku(Seleccionar comentario)
En la funcion conectar() no deberia ser:
if(!$this->comprueba)
En caso de que no se haya conectado antes, asi asume que comprueba es false y debe conectarse porque una vez conectado le cambias el valor a true.
Solo es una observación.
Saludos. Julio(Seleccionar comentario)