Hi,
I wrote a small patch to oci8.c's OCIError function which places the
following tag:
<span style="color:#FF0000; font-weight:bold"><ERROR></span>
just before an error in a sql statement and adds the modified statement
text into a new element called "sqltext" to the array returned by
OCIError, much the same way sqlplus adds an asterisk under an error.
I find this very useful, and I'm hoping you will too. I've attached the
patch.
Thanks,
Daniel Ceregatti
--- php-4.1.2/ext/oci8/oci8.c.orig Tue Mar 12 11:56:17 2002
+++ php-4.1.2/ext/oci8/oci8.c Tue Mar 12 12:23:35 2002
@@ -4090,10 +4090,13 @@
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;
+ char *retsql;
if (zend_get_parameters_ex(1, &arg) == SUCCESS) {
statement = (oci_statement *) zend_fetch_resource(arg TSRMLS_CC, -1,
NULL, NULL, 1, le_stmt);
@@ -4130,10 +4133,33 @@
(ub4) sizeof(errbuf),
(ub4) OCI_HTYPE_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));
+
if (errcode) {
+ retsql = (char *) malloc (strlen (sqltext) + 100);
+ memset (retsql, 0, strlen (sqltext) + 100);
+ strncat (retsql, sqltext, (int) errorofs);
+ strcat (retsql, "<span style=\"color:#FF0000;
+font-weight:bold\"><ERROR></span>");
+ strcat (retsql, (char *) sqltext + (int) errorofs);
array_init(return_value);
add_assoc_long(return_value, "code", errcode);
+ add_assoc_string(return_value, "sqltext", (char *) retsql, 1);
add_assoc_string(return_value, "message", (char*) errbuf, 1);
+ free (retsql);
} else {
RETURN_FALSE;
}
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php