Foros del Web » Programando para Internet » PHP »

Un pequeño aporte: manejador de conexiones a BD

Estas en el tema de Un pequeño aporte: manejador de conexiones a BD en el foro de PHP en Foros del Web. Holas gente peachepera... Aquí les dejo una clase para manejar conexiones a BD MySQL, y la dejo por 2 motivos: 1.- para que la use ...
  #1 (permalink)  
Antiguo 27/12/2006, 15:30
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Un pequeño aporte: manejador de conexiones a BD

Holas gente peachepera...

Aquí les dejo una clase para manejar conexiones a BD MySQL, y la dejo por 2 motivos:

1.- para que la use quien crea que es útil
2.- para que los expertos peacheperos de este foro me tiren algunas líneas para mejorarla en general y para permitir principalmente que pueda usarse con varios usuarios sin tener que pasarle todos los datos a la hora de la inicialización.


En fin, espero que les guste


Código PHP:
<?php
/*
BD v2 -> clase para manejo de conexiones y consultas a base de datos MySQL.
*/

# un poco de configuración
# ¿mostrar errores?
define('db_MOSTRAR_ERRORES'true);

# ¿salir si hay errores?: false para continuar.
define('db_SALIR_EN_ERROR'true);

# ¿mostrar la consulta al salir?
define('db_MOSTRAR_CONSULTA'true);


##### Usuario predeterminado
define('db_SERVIDOR''');
define('db_USUARIO''');
define('db_CONTRASENIA''');
define('db_BASE''');




if (!
class_exists('BD')) {

class 
BD {
 var 
$conex;
 var 
$cons;
 var 
$errConex;
 var 
$errCons;
 var 
$UltCons;
 var 
$total;


 function 
BD($base db_BASE) {
  
$conectado mysql_connectdb_SERVIDORdb_USUARIOdb_CONTRASENIA );
  if (
$conectado === false) {
   
$this->errConex "1 - No se pudo conectar al servidor: ".mysql_error();
   }
  else {
   if (
mysql_select_db($base$conectado) === false) {
    
$this->errConex "2 - No se pudo conectar a la base de datos especificada: ".mysql_error();
    }
   else {
    
$this->errConex "0 - Conexión realizada correctamente";
    
$this->conex $conectado;
    }
   }
  if (
$this->errConex[0] != '0') {
   if (
db_MOSTRAR_ERRORES) {
    echo 
$this->errConex;
    }
   if (
db_SALIR_EN_ERROR) {
    exit;
    }
   }
  }

 function 
Consulta($cadena_consulta) {
  
$this->UltCons $cadena_consulta;
  if (
$this->errConex{0} == '0') {
   
$res mysql_query($cadena_consulta$this->conex);
   if (
$res === false) {
    
$this->errCons '1 - Error en la Consulta: '.mysql_error();
    }
   else {
    
$this->errCons '0 - Consulta sin errores';
    
$this->cons $res;
    if ((
$res !== true) && ($res !== false) ) { # para que no lo calcule si no es necesario
     
$this->total mysql_num_rows($res);
     }
    }
   }
  else {
   
$this->errCons '2 - No se pudo realizar la consulta porque no hay conexiones activas';
   }
  if (
$this->errCons[0] != '0') {
   if (
db_MOSTRAR_ERRORES) {
    echo 
$this->errCons.'<p>';
    }
   if (
db_MOSTRAR_CONSULTA) {
    echo 
$this->UltCons;    
    }
   if (
db_SALIR_EN_ERROR) {
    exit;
    }
   }
  return (isset(
$this->cons)) ? $this->cons $this->errCons;
  }

 function 
cambiaBase($nueva_base) {
  if (
mysql_select_db($nuevabase$this->conex) === false) {
   
$this->errConex '2 - No se pudo conectar a la base de datos especificada: '.mysql_error();
   }
  else {
   
$this->errConex '0 - Conexión realizada correctamente';
   }
  }

 function 
obtenerAsoc($apuntador '') {
  
$apuntador = (empty($apuntador)) ? $this->cons $apuntador;
  return 
mysql_fetch_assoc($apuntador);
  }

 function 
obtenerReg($apuntador '') {
  
$apuntador = (empty($apuntador)) ? $this->cons $apuntador;
  return 
mysql_fetch_row($apuntador);
  }

 function 
Liberar($resultado '') {
  
$resultado = (empty($resultado)) ? $this->cons $resultado;
  return 
mysql_free_result($resultado);
  }
 }
}
?>

Saludos
  #2 (permalink)  
Antiguo 27/12/2006, 16:02
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: Un pequeño aporte: manejador de conexiones a BD

Deberías comentar un poco algunos métodos (ej: Consulta), estoy seguro que mucha gente no lo entenderá. Por otro lado por ahí es mas apropiado postear este thread en el sub foro de oop, donde hay gente que te sabrá dar opiniones mas "profesionales" que las que te puedo dar yo o la gente que prefiere/usa php procedural.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 27/12/2006, 21:31
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Un pequeño aporte: manejador de conexiones a BD

Te agradezco la sugerencia, tenés toda la razón, si no explico cómo funciona pos nadie la va a poder usar

Paso a explicar el funcionamiento:

primero hay que incluir el archivo. Luego se llama a una instancia de la clase con una línea como:

$conexion = new BD();

No es necesario un parámetro para BD, ya que por defecto se conectará a la base de datos especificada en db_BASE. Si se quiere usar otra bd, basta con

$conexion = new BD('nombre de la base');

La función BD() se ejecuta e inicia la conexión al servidor, guardando en errConex cualquier error producido y en conex el resultado devuelto por mysql_connect. O sea, que si hay algún error, se lo puede mostrar con

echo $conexion->errConex;

CONSULTAS:
se utiliza la función (método) Consulta, pasándole como parámetro el SQL correspondiente. Se almacena el resultado devuelto por mysql_query en cons y además se devuelve en caso de que se necesite trabajar con múltiples consultas

$resultado = $conexion->Consulta('SELECT......');

Cualquier error producido se guarda en 'errCons', la consulta usada se guarda en 'UltCons', y el número de registros devueltos se guarda en 'total'

Cambiar la base actual:
Se hace una llamada a cambiaBase() pasándole como parámetro el nombre de la nueva base:

$conexion->cambiaBase('nueva_base');


Obtener datos:
Se usan los métodos 'obtenerReg' (equivale a fetch_row) y 'obenerAsoc' (equivale a fetch_assoc). Si se trabaja con una sola consulta a la vez, no es necesario pasarles parámetros a los métodos, ya que por defecto tomarán el valor de $this->cons (es decir, el último resultado devuelto por un mysql_query). Se puede pasar como parámetro el valor de otro resultado (otra vez pensando en trabajar con varias consultas a la vez)

ejemplo:

while( $fila = $conexion->obtenerAsoc() ) {
// hacer lo que sea con la fila
}

Liberar resultado:
se utiliza el método Liberar(), que puede o no utilizarse con un parámetro (análogo a los anteriores).

Un ejemplo completo:
Código PHP:
<?php
include('bd.php');

$c = new BD();

$c->Consulta('SELECT nombre, apellido FROM personas');

while(
$fila $c->obtenerAsoc() ) {
 echo 
'- '.$fila['apellido'].', '.$fila['nombre']."\n";
 }

$c->Liberar();
Espero que esto sirva de aclaración sobre el funcionamiento.
En cuanto a POO o no, pues creo que en algunas cosas es más conveniente el uso de clases, pero también 'prefiero' el php estructurado.

En fin, saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:05.