Salu2
![Pensando](http://static.forosdelweb.com/fdwtheme/images/smilies/scratchchin.gif)
| |||
Pues .. No sé si usarás ya estructuras tipo: $result=mysql_query($sql) or die(mysql_error()); Pero, .. puedes usar la misma estructura condicional (una ejecución fallida de mysql_query() por ejemplo arroja un "false") para llamar a tu función que haga el log adecuado y sin el "die()" por si quieres continuar la ejecución de la aplicación y dar algún mensaje de error personalizado.) Pero, llegado a este punto tal vez te combien ir viendo ya alguna capa de abstracción de Base de datos. Estas "capas" suelen ser objetos (classes OOP) y principalmente lo que hacen es "pasar" todas tus llamadas a tus funciones "nativas" de tu BD (en tu caso a las mysql_xxx()) por unos métodos ("funciones") así todo acceso a tu BD (por las funciones de PHP para tu BD en concreto) las "centraliza" .. con eso es más cómodo por ejemplo gestionar los errores dandoles un formato único e incluso hacer tu log de errores o lo que requieras. Se usan tipo: $db->conectaBD(datos conexión); $db->consulta($sql); $db->otrosmetosos .... En ese ejemplo (hipotetico) .. lo que harías directamente por mysql_query($sql) .. ahora lo harías por $db->consulta($sql) así que ahí en ese método (función) puedes implementar la lógica de creación de tu log si hay un error (previa detección). Classes (capas de abstracción de BD) tienes muchas ya implementadas. La mayoría (que se precie) ya gestiona los errores y tal vez hasta hagan "log" (y si no los hace no sería dificil implementar un nuevo método para tal fin). Ademas de esto, no sólo se usan para "sustituir" funciones o "centarlizar" sino que te permiten usar indistintamente o Mysql como BD u otras Base de datos (PostgreSQL, MS SQL server ..etc) siempre y cuando tu SQL empleado sea compatible con estas podrás hacer funciona tu aplicación en tantas BD como soporte tu capa de abstracción de BD o como mucho tendras que cambiar ligeramente alguna sentencia SQL .. pero poco o nada de código PHP si migras tu aplicación hacia otro Motor de BD o bien quieres que tu aplicación funcione con varios motores de BD. En sitios como www.phpclasses.org puedes encontrar estas capas de abstracción de BD ... Una de las más famosas y completa es: ADOdb , pero hay muchas más simples que .. para ir tomando contacto con el tema te servirán. Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| |||
Hola, como dice Cluster, utilizar classes es un buena idea, simplifica mucho el trabajo a mediano y largo plazo, y mejora el codigo. Pero para el manejo de errores utilize o no classes, podes usar set_error_handler junto con trigger_error. Con el primero defines la función que se va a encargar de procesar los mensajes de error (sean propios del script o intencionalmente llamados por vos), con el segundo llamas a esa funcion pasandole automaticamente las variables de contexto (archivo, numero de linea,etc). Para una consulta de mysql quedaria : Código PHP: Para más información http://ar.php.net/manual/en/function...or-handler.php http://ar.php.net/manual/en/function.trigger-error.php Última edición por Ktion; 03/03/2004 a las 08:14 |
| |||
Estarìa bueno capturar el error de PHP con el control del handler que proponer Ktion .. pero te faltaría también añadir a esa función el control de errores de SQL/conexión que arroje Msyql en este caso usando la función mysql_error() a la hora de generar tu reporte de errores .. así veras más claro el error concreto. También puedes usar las constantes __FILE__ y ___LINE___ para determinar en que script se produjo el error y en que línea concreta del mismo. Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| |||
Si, el script anterior no es funcional, es solo de ejemplo, en realidad trigger_error necesita un parametro obligatorio (sino genera error ![]() El parametro obligatorio seria el texto del error o sea: mysql_query(...) or trigger_error(mysql_error()) El archivo y la linea, constantes __FILE__ y __LINE__, las pasa automaticamente el trigger_error al error_handler, por eso es que esta última función tiene que definirse con varios parametros. Saludos |