El acceso a base de datos es una de las tareas más comunes, en cualquier aplicación sobre Internet. Y una de las primeras que cualquier programador trata de automatizar. Y como casi todo en esta vida se les ha ocurrido antes muchos antes que a nosotros, y en algunos casos lo han resuelto francamente bien.
Como muestra, las clases de base de datos que incluye PHPLIB entre otras http://phplib.sourceforge.net/index.php3, además de las que incorpora para la gestión de sesiones, autentificación, etc.
Si vienes de la programación estructurada, probablemente las clases y la programación orientada a objetos, OOP, te resulten un tanto intimidatorias. Pero francamente el uso de las clases aporta tantas ventajas que merece la pena perder un poco de tiempo en comprender su funcionamiento.
Procuraré no hacer uso de la terminología que se utiliza en la OOP, aunque algunas veces será inevitable. En estos casos pasaré de puntillas sobre estos temas, ya que no es finalidad de este tutorial introducirte en el mundo de los objetos.
Para el uso de DB_Sql, solo tienes que descargarte https://sourceforge.net/project/showfiles.php la librería de clases y descomprimirlas. No te asustes entre todos esos ficheros, solo nos interesan unos pocos, en concreto los que empiezan por db_. Como podrás ver PHPLIB incluye clases para manejar las bases de datos más populares, entre las que se cuentan las de MySql, en la que nos centraremos, Oracle y Postgress entre otras.
Para utilizar una clase lo primero que hacemos es crear una instancia de la misma y para ello debemos pedir a PHP que incluya el fichero que incluye la clase. Lo haremos de la siguiente forma:
include ('/ruta_al_fichero/db_mysql.inc');
$q= new DB_Sql;
Como puedes ver para ello hemos utilizado la palabra new y lo hemos asignado a una variable $q. En realidad esto es un objeto, una instancia de la clase DB_Sql.
Ahora inicializaremos los parámetros de conexión a la base de datos, modificando algunas variables definidas dentro de la clase:
$q->Host = "tuHost";
$q->Database = "tuBaseDeDatos";
$q->User = "tuUsuario";
$q->Password = "tuPassword";
Por supuesto, puedes asignar estos parámetros dentro de la clase a las correspondientes variables, de esta forma los datos de conexión siempre serán los mismos.
Hasta el momento deberías tener algo como esto:
<?php
include ('/ruta_al_fichero/db_mysql.inc');
$q= new DB_Sql;
$q->Host = "tuHost";
$q->Database = "tuBaseDeDatos";
$q->User = "tuUsuario";
$q->Password = "tuPassword";
?>
Ahora es el momento de hacer algo práctico con nuestra clase. Supongamos una base de datos con la siguiente estructura:
create table amigos (
id int(11) default '0' not null auto_increment,
nombre varchar(25),
apellidos varchar(25),
dirección varchar(50),
ciudad varchar(50),
pais varchar(50),
primary key (id)
);
Vamos a realizar un query a la base de datos, usando el objeto $q. La construcción del query se hace de la misma forma que si atacaramos directamente a la base de datos, con las funciones de PHP:
$query='select * from amigos';
$q->query($query);
Con esto, si todo fué bien, habremos conseguido los registros que cumplen la condición de la tabla amigos. Pero, ¿como podemos asegurarnos de que hemos obtenido algún registro?. Bien, por un lado deberemos asegurarnos de que la conexión con la base de datos se ha establecido.
DB_sql establece una conexión persistente al efectuar la consulta, por lo tanto si $q->query() devuelve algún valor, sabremos que la conexión se ha establecido. Para asegurarnos de que la consulta ha sido exitosa, deberemos tener en cuenta que algunas veces una consulta puede ser verdadera, pero no devolver ningún resultado, caso muy común al realizar un select. El query ha sido efectuado, pero no se ha encontrado ningún resultado que cumpliera la condición.
Es por lo tanto una buena práctica verificar este punto, así es como quedaría nuestro código:
$query='select * from amigos';
if (!$q->query($query)){
echo 'Lo siento no se pudo establecer la conexión\n';
}else{
if (!$q->num_rows()){
echo 'Lo siento no se ha obtenido ningún resultado\n';
}else{
echo 'Hey! hay '.$q->num_rows().' registros que cumplen la condición';
}
}
Esto esta muy bien, pero veamos ahora como manejar los registros y campos de forma individual. Recorreremos los resultados e iremos mostrando los datos que nos interesen uno a uno:
$query='select * from amigos';
if (!$q->query($query)){
echo 'Lo siento no se pudo establecer la conexión\n';
}else{
if (!$q->num_rows()){
echo 'Lo siento no se ha obtenido ningún resultado\n';
}else{
echo 'Hey! hay '.$q->num_rows().' registros que cumplen la condición';
while ($q->next_record()!=0){
echo 'El id es: '.$q->f('id')."\n";
echo $q->f('nombre').' '.$q->f('apellidos')."\n";
}
}
}
De la misma forma que hacemos un select, haremos un insert, update o delete. Obviamente estos tres últimos no devuelven resultados, por lo tanto para saber si nuestros queries han funcionado recurriremos a la función affected_rows de la clase DB_Sql, de esta forma:
$query='delete from amigos where ciudad="Medellín"';
if (!$q->query($query)){
echo 'Lo siento no se pudo establecer la conexión\n';
}else{
if (!$q->affected_rows()){
echo 'No encontré ningún registro que cumpla la condición\n';
}else{
echo 'Se han eliminado '.$q->affected_rows().' registros';
}
}
Como puedes comprobar, el uso de una clase no es nada complicado. Solo debes preocuparte por conocer los métodos, que son las funciones de la clase que tienes disponibles y lo que hacen. Habitualmente las clases están suficientemente documentadas y te muestran los valores de entrada y salida requeridos. Además es una buena forma de mejorar tu estilo de programación y adquirir nuevos conocimientos.
El uso básico de las clases que incorpora PHPLIB para aplicarlo a otras bases de datos, como Oracle o MSSql, es básicamente igual, puede que más o menos funciones, aunque las básicas son iguales en todos los casos. Es importante que revises la documentación, para comprobar las posibles diferencias.
Ten en cuenta que cualquier llamada del tipo $q->loquesea(), es una llamada al método de una clase y que algo del tipo $q->otracosa es una variable de la clase, un atributo. Con paréntesis, un método, como una función normal de PHP y sin ellos una atributo.
Dentro de la clase la llamada a las funciones y variables se hace con la palabra reservada this. Por lo tanto cuando te encuentres un $this->algo, fíjate si tiene o no paréntesis a continuación, y así sabrás si es una llamada a un método de la clase o alguna operación con variables.
Si quieres realizar cualquier comentario o tienes alguna duda, ponlo aquí mismo, en el foro, así se beneficiarán el resto de los usuarios.
Y esto es todo de momento, espero que te sirva de ayuda. Hasta pronto.
Saludos J.Valle www.1234web.net
Recuperado del antiguo foro de tontos.com Revisado el 12 octubre de 2002.
Publicado originalmente en Desarrolloweb.com marzo de 2003
Comentarios
Los nuevos comentarios se moderan antes de mostrarse públicamente.
Todavía no hay comentarios aprobados.
Deja un comentario
Necesitas una cuenta para participar en la conversación. Accede o regístrate para comentar.