Este va a ser el último tip para ir mejorando nuestra clase. Durante todo el recorrido hemos podido ver una evolución de nuestra clase, ganando abstracción, ganando flexibilidad y ahora vamos a ganar capacidad gestión de errores.
Un problema que podemos tener al trabajar con nuestra base de datos, es que ésta no esté disponible en un momento determinado por que esté sobrecargada o por que no hay posibilidad de conexión. Por ello, debemos controlar que si no tenemos conexión a la base de datos, la ejecución de nuestra aplicación sea detenida inmediatamente (en el caso de que el uso de la base de datos sea crítico y nuestra aplicación sea 100% dependiente de la conexión a la base de datos.
Existen multitud de formas de controlar y gestionar los errores. PHP nos da ciertas herramientas para intentar capturar estas situaciones. En el ejemplo vamos a utilizar la función exit, que permite detener inmediatamente la ejecución de nuestro script, y también la función error_log que permite registrar en el log de errores de nuestro servidor web un evento, en nuestro caso, una frase identificadora para que podamos saber cuando ha pasado el problema. Si tenemos un hosting contratado (no un servidor dedicado), es prácticamente seguro que no tendremos acceso al fichero de logs del servidor web, pero lo bueno de esta función es que también es capaz de guardar el registro que nosotros queramos en un determinado fichero o incluso mandar un e-mail a una determinada cuenta. Recomiendo mirar la documentación por que además de las capacidades citadas, permite más opciones, las cuales puedes ser muy útiles para nuestra aplicación.
Lo que vamos a hacer es modificar la función pública conectar() de la clase Db. En dicha función vamos a detectar si nuestra conexión ha fallado, y si se da el caso, registrar dicho error para luego diagnosticar el problema, además de mostrar un error por pantalla avisando al visitante de existe un problema con nuestra aplicación.
Código :
/*Realiza la conexión a la base de datos.*/
private function conectar(){
switch ($this->tipo){
case 'mysql': $link=mysql_connect($this->servidor, $this->usuario, $this->password);
if ($link){
mysql_select_db($this->base_datos,$this->link);
@mysql_query("SET NAMES 'utf8'");
}
break;
case 'postgress': $link=pg_connect("host=".$this->servidor." dbname=".$this->base_datos." user=".$this->usuario." password=".$this->password)
break;
break;
}
if (!$link){
error_log(0,'Problema de conexión a la base de datos.');
exit('Perdonen las molestias. Tenemos un problema técnico. Esperamos resolverlo en los próximos minutos');
}else{
$this->link=$link;
}
}
Con esto ponemos fin a una pequeña colección de tips. Espero que esto les haya servidor para ir aprendiendo como poder crear y desarrollar una clase, utilizar un patrón de diseño y crear niveles de abastracción.
Muy buen seguimiento con los Tips, pero... Me queda la duda, ¿No hubiese sido mejor armar un Tutorial con el contenido de todos los Tips juntos? Por:M@U
Sí, seguramente sería lo correcto. Mi intención era ir mostrando poco a poco como mejorar la clase y que los compañeros que tengan un conocimiento bajo en PHP o en programación en general, fueran entendiendo y probando la información. Por:marcosdev
M@U :
Muy buen seguimiento con los Tips, pero... Me queda la duda, ¿No hubiese sido mejor armar un Tutorial con el contenido de todos los Tips juntos?
Pues en esta modalidad a mi me gustó. Es una nueva forma, interesante. Por:Freddie
Freddie :
M@U :
Muy buen seguimiento con los Tips, pero... Me queda la duda, ¿No hubiese sido mejor armar un Tutorial con el contenido de todos los Tips juntos?
Pues en esta modalidad a mi me gustó. Es una nueva forma, interesante.
Sí, es interesante, pero no nueva. Yo diría que es una versión mejorada del intento deel OsoCariñoso con los tips sobre CSS. Por:The Fricky!
The Fricky! :
Freddie :
Pues en esta modalidad a mi me gustó. Es una nueva forma, interesante.
Sí, es interesante, pero no nueva. Yo diría que es una versión mejorada del intento de el OsoCariñoso con los tips sobre CSS.
Cierto ! Entonces, se que no es el lugar adecuado pero ¿es acaso una buena opción dividir en dos partes un tutorial (que tardara años en ser publicado), en múltiples Tips?
Es decir, el ClabLvL para mi es lo de menos, pero es el mismo resultado en menos tiempo, y dos espacios en portada... Como dije, ¿que opinan? Por:M@U
Buen tip Está muy interesante toda la serie Por:Zguillez
Me gusto el progreso y muy bien explicado , si que he aprendido uno que otro tip con esto. Gracias por compartirlo Por:Otaku RzO
Pero teng un prequenio problema, al querer probarlo para ver como funciona, la ejecucion muere al ejecutarse:
$bd=Db::getInstance();
Alguna idea?
Pero teng un prequenio problema, al querer probarlo para ver como funciona, la ejecucion muere al ejecutarse: $bd=Db::getInstance(); Alguna idea?
Gracias.
Gustavo.
Si se para la ejecución en ese punto es que hay algún problema con la conexión o los parámetros. Recuerda tener la clase completa, la clase conf y el fichero de configuración Por:marcosdev
duda, que pasa con la conexion cuando se crea una instancia.
¿como se cierran las conexiones?
Que sucede cuando cierro varias instancias, que pasa con las conexiones??
Gracias Por:francisco Birrer (fbirrer
Muy buen tutorial, me sirvio para iniciarme en php. Muchas Gracias Por:guambe-blog