Me he metido en un hoyo con el proyecto en el que estoy trabajando. Tengo este proyecto masivo (cientos de miles de líneas) y hay errores de MySQL en todas partes. Estoy en el proceso de limpiarlos ahora.¿Lanzar una excepción sin detener la ejecución?
Tengo esta clase de base de datos por la que pasan todas las consultas, así que lo que he hecho es que siempre que hay un error de SQL, arrojo una excepción ahora. El problema es que no puedo detener la ejecución. Tiene que continuar como siempre, y solo registrar la excepción para poder rastrearlos y solucionarlos de a uno por vez.
Esperaba que set_exception_handler
hiciera lo que quisiera, pero los documentos dicen específicamente que detendrá la ejecución después de llamar a mi controlador. Entonces, ¿cómo puedo solucionar esto?
La excepción puede detener la función actual, pero luego quiero que abandone la función, tal vez devuelva nulo o falso, y luego continúe como siempre, pero necesito que llame a mi manejador global de excepciones.
Para aclarar:
Quiero lanzar una excepción de mi clase de base de datos (cada vez que hay un error de SQL). Luego quiero registrar este error y/o mostrar un mensaje en la pantalla hasta que pueda corregir el error de SQL o ajustar la línea ofensiva en un try/catch. No quiero que detenga la ejecución. Si simplemente llamo a alguna función error_handler()
en lugar de lanzar una excepción, entonces no puedo atraparla. Si lo encuentro de inmediato (también dentro de la clase DB), no puedo atraparlo más abajo en la pila (a menos que lo vuelva a lanzar, pero luego volvemos a detener la ejecución).
Si ya ha actualizó el código para traducir los errores de MySQL en excepciones, ¿por qué no solo registra el error en lugar de lanzar una excepción? – pgraham
@pgraham: Maldición ... esa es una buena pregunta. La razón es porque quería poder detectar la excepción si no quería que cayera en el controlador de excepción global. Además, quiero una función centralizada de manejo y registro de excepciones. Por último, una vez que limpie los errores, quiero modificar ligeramente el controlador global de excepciones para que realmente * se * muera y arroje un error fatal. – mpen
@downvoter: ¿Le interesa explicar por qué esta es una mala pregunta? – mpen