]> granicus.if.org Git - php/commitdiff
- Let OCIError() also return the sql statement which failed and the exact
authorMarkus Fischer <mfischer@php.net>
Mon, 18 Mar 2002 21:01:29 +0000 (21:01 +0000)
committerMarkus Fischer <mfischer@php.net>
Mon, 18 Mar 2002 21:01:29 +0000 (21:01 +0000)
  position into the statement where it failed (if applicable).
  Patch by Daniel Ceregatti <vi@sh.nu>.

ext/oci8/oci8.c

index 988b4bc5d5e9ff52706cba9731061694d5134663..baccacd562e179bfc2b00a49baa68f0a7fab98a5 100644 (file)
@@ -4218,16 +4218,35 @@ PHP_FUNCTION(ocierror)
        zval **arg;
        oci_statement *statement;
        oci_connection *connection;
-    text errbuf[512];
-    sb4 errcode = 0;
+       text errbuf[512];
+       sb4 errcode = 0;
        sword error = 0;
        dvoid *errh = NULL;
+       ub2 errorofs = 0;
+       text *sqltext = NULL;
 
        if (zend_get_parameters_ex(1, &arg) == SUCCESS) {
                statement = (oci_statement *) zend_fetch_resource(arg TSRMLS_CC, -1, NULL, NULL, 1, le_stmt);
                if (statement) {
                        errh = statement->pError;
                        error = statement->error;
+
+                       CALL_OCI_RETURN(statement->error, OCIAttrGet(
+                               (dvoid *)statement->pStmt,
+                               OCI_HTYPE_STMT,
+                               (text *) &sqltext,
+                               (ub4 *)0,
+                               OCI_ATTR_STATEMENT,
+                               statement->pError));
+
+                       CALL_OCI_RETURN(statement->error, OCIAttrGet(
+                               (dvoid *)statement->pStmt,
+                               OCI_HTYPE_STMT,
+                               (ub2 *)&errorofs,
+                               (ub4 *)0,
+                               OCI_ATTR_PARSE_ERROR_OFFSET,
+                               statement->pError));
+
                } else {
                        connection = (oci_connection *) zend_fetch_resource(arg TSRMLS_CC, -1, NULL, NULL, 1, le_conn);
                        if (connection) {
@@ -4262,6 +4281,8 @@ PHP_FUNCTION(ocierror)
                array_init(return_value);
                add_assoc_long(return_value, "code", errcode);
                add_assoc_string(return_value, "message", (char*) errbuf, 1);
+               add_assoc_long(return_value, "offset", errorofs);
+               add_assoc_string(return_value, "sqltext", sqltext ? (char *) sqltext : "", 1);
        } else {
                RETURN_FALSE;
        }