Re: OCIError patch
| From: | Andi Gutmans | Date: | Tue, 12 Mar 2002 21:08:22 +0000 |
| Subject: | Re: OCIError patch | ||
| References: | 1 2 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-81098@lists.php.net to get a copy of this message | ||
Hey,
I'm not quite sure it's correct for the error message to print HTML itself. It's probably more correct to do this from user land.
In any case, you should not be using malloc()/free() but emalloc()/efree(). If the request gets interrupted the memory will be freed if you're using emalloc().
Andi
At 12:59 12/03/2002 -0800, Walter A. Boring IV wrote:
Ahh. very kewl patch Dan. Walt On Tue, 2002-03-12 at 12:48, Daniel Ceregatti wrote: 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 -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php