Debe introducir al menos 3 caracteres en el buscador.
Inicio / Wikis / Cursos gratis / Introducción a PHPLib, 1ra parte - Usando el PHPLib para trabajar con una Base de Datos

Introducción a PHPLib, 1ra parte - Usando el PHPLib para trabajar con una Base de Datos

 ----- 
Creative Commons Curso gratis de Ricardo Muñoz - 12 de Junio de 2005
4. Usando el PHPLib para trabajar con una Base de Datos
Si uno está acostumbrado a la programación estructurada, probablemente las clases, y la programación orientada a objetos, OOP, suenen como algo nuevo y un poco intimidatorio. Pero el uso de las clases aporta tantas ventajas que merece la pena perder un poco de tiempo en comprender su funcionamiento. Además, una vez que uno comienza usar PHPLib, se olvida que está usando OOP...

Cualquier llamada del tipo $db->metodo(), es una llamada al método de una clase (se podría decir que un método equivale a una función), y que algo del tipo $q->variable es una variable de la clase.

Dentro de la clase la llamada a las funciones y variables se hace con la palabra reservada this. Por lo tanto cuando se tiene un $this->algo, hay que fijarse si tiene o no paréntesis a continuación, y así se sabrá si es una llamada a un método de la clase o alguna operación con variables.


Si se estuviera haciendo una consulta a una BD MySQL, en PHP se tendría la siguiente sintáxis:

$db = mysql_connect("nombrehost", "usuario"); mysql_select_db("nombrebd",$db); $result = mysql_query("SELECT campo1,campo2 FROM tabla",$db); echo "<table border='1'>\n"; echo "<tr><td>Campo1</td><td>Campo2</td></tr>\n"; while ($myrow = mysql_fetch_row($result)) { echo "<tr><td>".$myrow[1]."</td><td>".$myrow[2]."</td></tr>\n"; } echo "</table>\n";

Esto mismo, usando PHPLib quedaría como:

$db=new DB_prueba(); nueva instancia de la BD $sel="SELECT campo1,campo2 FROM tabla"; consulta SQL $db->query($sel); se hace la consulta echo "<table border='1'>\n"; echo "<tr><td>Campo1</td><td>Campo2</td></tr>\n"; while ($db->next_record()) { se recorren los registros resultantes echo "<tr><td>".$db->f('campo1')."</td><td>".$db->f('campo2')."</td></tr>\n"; } echo "</table>\n";

Cual es la ventaja? Bueno, a primera vista ninguna, pero si se quiere usar este código para ejecutar la misma consulta sobre una BD PosgtreSQL u Oracle, no sería necesario cambiar ni una sóla línea de código!! Bastaría con sólo modificar el prepend.php indicando db_pgsql.php o db_oracle.php y listo!!

Nota: quizás alguien se estará preguntando; "en que momento se debe cerrar la conexión a la BD?". Bueno, el método next_record() que recorre los registros obtenidos mediante un select, al llegar al último registro + 1 cierra la conexión a la BD.


Para asegurse de que una consulta ha sido exitosa, se debe 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. Es por lo tanto una buena práctica verificar este punto:

$db=new DB_prueba(); $sel="SELECT campo1,campo2 FROM tabla where campo3 = condicion"; if (!$db->query($sel)) echo "No se pudo establecer una conexión con la BD."; else if (!$db->num_rows()) $db->num_rows() devuelve cantidad de registros según consulta echo "No se ha obtenido ningún resultado."; else echo "Hay ".$db->num_rows()." registros que cumplen la condición!";


De la misma forma que se hace un select, se debe hacer un insert, update o delete. Como estos tres últimos no devuelven resultados, sería útil saber si los queries han funcionado. Para esto se puede usar el método affected_rows() de la clase DB_Sql, de esta forma:

$db=new DB_prueba(); $query="delete from tabla where campo4 = condicion"; if ( !$db->query($query) ) echo "No se pudo establecer la conexión."; else if ( !$db->affected_rows() ) echo "No se encontro ningún registro que cumpla la condición."; else echo "Se han eliminado ".$db->affected_rows()." registros";


Halt_On_Error


Una de las variables de la clase DB_Sql es Halt_On_Error. Está variable se puede setear al definir la clase, pudiendo ser su valor "yes", "report" o "no". Por defecto, su valor es "yes", lo cual significa que se mostrará cualquier error de BD, y se detendrá la ejecución de la aplicación PHP.

Si se setea esta variable en "report", la aplicación mostrará los mensajes de error de la BD, pero también dejará los correspondientes valores Errno y Error en sus respectivas variables.

Finalmente, si Halt_On_Error se deja en "no", no se reportarán errores de BD, no se detiene la ejecución de la aplicación PHP, y se setean las variables Errno y Error.

Básicamente, se setea mediante:

class DB_prueba extends DB_Sql { . . var $Halt_On_Error="no"; aca se deja en yes, no o report }

Método haltmsg()


La clase DB_Sql provee del método haltmsg(), que se ejecuta al ocurrir en error de BD, mostrando un mensaje de error por defecto.

Por ejemplo en db_mysql.inc está definido como:

function haltmsg($msg) { printf("</td></tr></table><b>Database error:</b> %s<br>\n", $msg); printf("<b>MySQL Error</b>: %s (%s)<br>\n", $this->Errno, $this->Error); }

La variable $msg puede ser usada para pasarle al método un string con un mensaje cualquiera.

El método haltmsg() puede ser re-creado al momento de definir nuestra clase, por ejemplo:

class DB_prueba extends DB_Sql { . . var $Halt_On_Error="no"; function haltmsg($msg) { printf("<br>Ha ocurrido un error de Base de Datos. %s<br>\n", $msg); } }

Un ejemplo práctico y más completo del manejo de errores podría ser:

$db=new DB_prueba(); $query="delete from tabla where campo4 = condicion"; $q->query($query);
Para ver el número y mensaje de error: echo $db->Errno; echo $db->Error; if (!$db->Errno
0) $db->haltmsg("Disculpe las molestias."); else { código o HTML }
Se tratará de ejecutar la query, si ocurre algún error se mostrará:

Ha ocurrido un error de Base de Datos. Disculpe las molestias.

Lo bueno de este método es que en cada clase se pueden manejar los errores de BD de manera distinta. No necesariamente debe ser con un mensaje por pantalla, tambíen se podria enviar un correo electrónico al administrador de la BD y/o Webmaster, con información del error, en que página ocurrió, etc.

Hasta aquí llega la primera parte. Como pueden ver no es tan complicado usar PHPLib, no olviden leer la documentación oficial y también si quieren revisar el código fuente.

En la segunda parte del artículo, se revisará el manejo de sesiones, autentificación y permisos. Hasta pronto!
Autor y licencia de 'Introducción a PHPLib, 1ra parte - Usando el PHPLib para trabajar con una Base de Datos'
Ricardo Muñoz Extraído de: http://www.tux.cl/articulos.php?id=39

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
copyleft © 2000-2004 tux.cl
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Wikis relacionados con 'Introducción a PHPLib, 1ra parte - Usando el PHPLib para trabajar con una Base de Datos'

Cualquier aplicación web mediana o grande necesita manejar usuarios. En este artículo se mostrará el... Más »
PHPlib es un conjunto de clases que permiten de manera rápida y fácil manejar las... Más »
Trabajar en equipo está de moda. En todos los ámbitos: políticos, económicos, deportivos, artísticos, pedagógicos,... Más »
Nos complace presentar el Plan detallado de consultoría y formación que Luis E. Vásquez ... Más »
Un sistema informático utiliza ordenadores para almacenar datos, procesarlos y ponerlos a disposición de quien... Más »
¿Estás seguro de que deseas eliminar este capítulo?