iliaa           Tue Jan 31 17:21:26 2006 UTC

  Modified files:              
    /php-src/ext/pdo    pdo_dbh.c 
  Log:
  MFB51: Fixed bug #36222 (errorInfo in PDOException is always NULL).
  
  
http://cvs.php.net/viewcvs.cgi/php-src/ext/pdo/pdo_dbh.c?r1=1.108&r2=1.109&diff_format=u
Index: php-src/ext/pdo/pdo_dbh.c
diff -u php-src/ext/pdo/pdo_dbh.c:1.108 php-src/ext/pdo/pdo_dbh.c:1.109
--- php-src/ext/pdo/pdo_dbh.c:1.108     Sun Jan  1 13:09:52 2006
+++ php-src/ext/pdo/pdo_dbh.c   Tue Jan 31 17:21:25 2006
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_dbh.c,v 1.108 2006/01/01 13:09:52 sniper Exp $ */
+/* $Id: pdo_dbh.c,v 1.109 2006/01/31 17:21:25 iliaa Exp $ */
 
 /* The PDO Database Handle Class */
 
@@ -41,7 +41,6 @@
        pdo_error_type *pdo_err = &dbh->error_code;
        char *message = NULL;
        const char *msg;
-       zval *info = NULL;
 
        if (dbh->error_mode == PDO_ERRMODE_SILENT) {
 #if 0
@@ -64,12 +63,6 @@
                msg = "<<Unknown error>>";
        }
 
-       MAKE_STD_ZVAL(info);
-       array_init(info);
-
-       add_next_index_string(info, *pdo_err, 1);
-       add_next_index_long(info, 0);
-               
        if (supp) {
                spprintf(&message, 0, "SQLSTATE[%s]: %s: %s", *pdo_err, msg, 
supp);
        } else {
@@ -78,12 +71,8 @@
 
        if (dbh->error_mode != PDO_ERRMODE_EXCEPTION) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", message);
-
-               if (info) {
-                       zval_ptr_dtor(&info);
-               }
        } else {
-               zval *ex;
+               zval *ex, info;
                zend_class_entry *def_ex = php_pdo_get_exception_base(1 
TSRMLS_CC), *pdo_ex = php_pdo_get_exception(TSRMLS_C);
 
                MAKE_STD_ZVAL(ex);
@@ -92,10 +81,14 @@
                zend_update_property_string(def_ex, ex, "message", 
sizeof("message")-1, message TSRMLS_CC);
                zend_update_property_string(def_ex, ex, "code", 
sizeof("code")-1, *pdo_err TSRMLS_CC);
                
-               if (info) {
-                       zend_update_property(pdo_ex, ex, "errorInfo", 
sizeof("errorInfo")-1, info TSRMLS_CC);
-                       zval_ptr_dtor(&info);
-               }
+               MAKE_STD_ZVAL(info);
+               array_init(info);
+
+               add_next_index_string(info, *pdo_err, 1);
+               add_next_index_long(info, 0);
+
+               zend_update_property(pdo_ex, ex, "errorInfo", 
sizeof("errorInfo")-1, info TSRMLS_CC);
+               zval_ptr_dtor(&info);
 
                zend_throw_exception_object(ex TSRMLS_CC);
        }
@@ -129,7 +122,6 @@
        }
 
        if (dbh->methods->fetch_err) {
-               
                MAKE_STD_ZVAL(info);
                array_init(info);
 
@@ -146,9 +138,6 @@
                                supp = estrndup(Z_STRVAL_PP(item), 
Z_STRLEN_PP(item));
                        }
                }
-
-               zval_ptr_dtor(&info);
-               info = NULL;
        }
 
        if (supp) {
@@ -159,10 +148,6 @@
 
        if (dbh->error_mode == PDO_ERRMODE_WARNING) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", message);
-
-               if (info) {
-                       zval_ptr_dtor(&info);
-               }
        } else if (EG(exception) == NULL) {
                zval *ex;
                zend_class_entry *def_ex = php_pdo_get_exception_base(1 
TSRMLS_CC), *pdo_ex = php_pdo_get_exception(TSRMLS_C);
@@ -175,12 +160,15 @@
                
                if (info) {
                        zend_update_property(pdo_ex, ex, "errorInfo", 
sizeof("errorInfo")-1, info TSRMLS_CC);
-                       zval_ptr_dtor(&info);
                }
 
                zend_throw_exception_object(ex TSRMLS_CC);
        }
-       
+
+       if (info) {
+               zval_ptr_dtor(&info);
+       }
+
        if (message) {
                efree(message);
        }
@@ -1318,6 +1306,11 @@
        if (--dbh->refcount)
                return;
 
+       if (dbh->query_stmt) {
+               zval_dtor(&dbh->query_stmt_zval);
+               dbh->query_stmt = NULL;
+       }
+
        if (dbh->methods) {
                dbh->methods->closer(dbh TSRMLS_CC);
        }

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to