Capitulos de este wiki
  1. 1 Introducción: Que es PHPlib, características, ventajas.
  2. 2 Instalación
  3. 3 Clase DB_Sql y la abstracción de BD
  4. 4 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

4 - Usando el PHPLib para trabajar con una Base de Datos

[editar]
Tutorial creado por Ricardo Muñoz A.. Extraido de: http://www.tux.cl/doku.php?id=articulos:primeros_pasos:introduccion_a_phplib_1ra_parte
02 de Marzo de 2006

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.

4.1 Consulta b¨¢sica a una BD


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.

4.2 Usando num_rows()


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!"; 

4.3 Usando affected_rows()


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"; 

4.4 Manejo de errores


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
)
$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!
[editar]

Sé el primero en opinar


Tutoriales relacionados con 'Introducción a PHPLib, 1ra parte'

PHPlib es un conjunto de clases que permiten de manera rápida y fácil manejar las... Más »

Autor y licencia de 'Introducción a PHPLib, 1ra parte'

Copyleft 2000-2006 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.