Ho imparato che non sempre odbc_execute()
innescare un errore ODBC corretta quando ritorna FALSE
(almeno non con il driver Oracle) e non posso pienamente fiducia odbc_error()
o odbc_errormsg()
. Questa situazione è facile da rilevare quando non si è verificato un errore precedente poiché odbc_error()
restituisce una stringa vuota. Tuttavia, quando restituisce qualcosa, non so se appartiene all'ultima operazione fallita o è un errore precedente.trucco per ripristinare odbc_error()
La soluzione più semplice sarebbe quella di ripristinare il odbc_error()
e odbc_errormsg()
funzioni quando c'è un errore in modo prossimi inviti sarebbero ripartire da zero, ma non sono riuscito a trovare un modo supportato per farlo. Riesci a capire un modo per farlo?
Background: sto migliorando un'applicazione legacy con una classe che incapsula le chiamate al database. Ecco perché ho bisogno di rendere tutto il più generico possibile.
Grazie per la risposta. Eppure la tua risposta va bene solo nel caso in cui uno abbia bisogno dei messaggi di errore solo a scopo di debug. In un'applicazione del mondo reale, si dovrebbe essere in grado di fare affidamento sui messaggi di errore per prendere decisioni (comportamento diverso in base all'errore o tradurre il messaggio in un modo che ha senso per l'utente finale). Questo è il motivo per cui avevo bisogno di una risposta approfondita e ho offerto una taglia. –
Il bug della piattaforma radice di cui tratta questa domanda è che 'odbc_errormsg()' può restituire felicemente il messaggio da un'istruzione precedente. Il problema non è quello di rilevare se la query ha esito positivo (è facile), il problema è di essere sicuri che il messaggio di errore non appartiene a una query precedente.A meno che non manchi qualcosa, il tuo codice non fa nulla per risolverlo. –
In questo approccio, siamo in grado di rilevare se un messaggio di arresto da dichiarazione precedente o meno. Ad esempio, diciamo, stiamo eseguendo tre query. Il primo ha successo, il secondo fallisce e restituisce "messaggio di errore 1". E il terzo fallisce anche il ritorno "fail message 1". Con questo approccio, possiamo apprendere che "il messaggio di errore 1" appartiene alla query 2. – isa