He aprendido que no siempre odbc_execute()
desencadenar un error de ODBC adecuado cuando vuelve FALSE
(no al menos con el conductor de Oracle) y no puedo confiar plenamente odbc_error()
o odbc_errormsg()
. Esta situación es fácil de detectar cuando no había un error anterior porque odbc_error()
devuelve una cadena vacía. Sin embargo, cuando devuelve algo, no sé si pertenece a la última operación fallida o es un remanente de un error anterior.truco para restablecer odbc_error()
La solución más sencilla sería la de restablecer la odbc_error()
odbc_errormsg()
y funciones cuando hay un error tan próximos llamadas comenzarían a partir de cero, pero no pude encontrar una forma compatible de hacerlo. ¿Puedes encontrar una manera de hacerlo?
Antecedentes: estoy mejorando una aplicación heredada con una clase que encapsula las llamadas a la base de datos. Es por eso que necesito hacer todo lo más genérico posible.
Gracias por la respuesta. Sin embargo, su respuesta solo está bien para el caso de que uno necesite los mensajes de error solo para depuración. En una aplicación del mundo real, uno debería poder confiar en los mensajes de error para tomar decisiones (comportamiento diferente según el error, o traducir el mensaje de manera que tenga sentido para el usuario final). Esta es la razón por la cual necesitaba una respuesta completa y ofrecí una recompensa. –
El error de la plataforma raíz de la pregunta es que 'odbc_errormsg()' puede devolver felizmente el mensaje de una declaración anterior. El problema no es detectar si su consulta tiene éxito (eso es fácil), el problema es asegurarse de que el mensaje de error no pertenezca a una consulta previa.A menos que me falta algo, su código no hace nada para resolver eso. –
En este enfoque, podemos detectar si un mensaje de error de una declaración anterior o no. Por ejemplo, digamos que estamos ejecutando tres consultas. El primero es exitoso, el segundo falla y devuelve "mensaje de falla 1". Y el tercero tampoco devuelve el "mensaje de error 1". Con este enfoque, podemos aprender que "mensaje de error 1" pertenece a la consulta 2. – isa