cvs: php-src(PHP_5_1) /ext/pdo pdo_dbh.c php_pdo_driver.h php_pdo_int.h /ext/pdo/tests bug_34687.phpt

From: Date: Sun, 02 Oct 2005 22:11:19 +0000
Subject: cvs: php-src(PHP_5_1) /ext/pdo pdo_dbh.c php_pdo_driver.h php_pdo_int.h /ext/pdo/tests bug_34687.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-34232@lists.php.net to get a copy of this message
wez Sun Oct 2 18:11:19 2005 EDT Added files: (Branch: PHP_5_1) /php-src/ext/pdo/tests bug_34687.phpt Modified files: /php-src/ext/pdo pdo_dbh.c php_pdo_driver.h php_pdo_int.h Log: Fix Bug #34687; error information from query() not passed back http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_dbh.c?r1=1.82.2.7&r2=1.82.2.8&ty=u Index: php-src/ext/pdo/pdo_dbh.c diff -u php-src/ext/pdo/pdo_dbh.c:1.82.2.7 php-src/ext/pdo/pdo_dbh.c:1.82.2.8 --- php-src/ext/pdo/pdo_dbh.c:1.82.2.7 Sun Oct 2 16:38:18 2005 +++ php-src/ext/pdo/pdo_dbh.c Sun Oct 2 18:11:17 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: pdo_dbh.c,v 1.82.2.7 2005/10/02 20:38:18 helly Exp $ */ +/* $Id: pdo_dbh.c,v 1.82.2.8 2005/10/02 22:11:17 wez Exp $ */ /* The PDO Database Handle Class */ @@ -919,6 +919,10 @@ } PDO_CONSTRUCT_CHECK; + if (dbh->query_stmt) { + RETURN_STRING(dbh->query_stmt->error_code, 1); + } + RETURN_STRING(dbh->error_code, 1); } /* }}} */ @@ -935,10 +939,14 @@ PDO_CONSTRUCT_CHECK; array_init(return_value); - add_next_index_string(return_value, dbh->error_code, 1); + if (dbh->query_stmt) { + add_next_index_string(return_value, dbh->query_stmt->error_code, 1); + } else { + add_next_index_string(return_value, dbh->error_code, 1); + } if (dbh->methods->fetch_err) { - dbh->methods->fetch_err(dbh, NULL, return_value TSRMLS_CC); + dbh->methods->fetch_err(dbh, dbh->query_stmt, return_value TSRMLS_CC); } } /* }}} */ @@ -981,8 +989,6 @@ if (dbh->methods->preparer(dbh, statement, statement_len, stmt, NULL TSRMLS_CC)) { if (ZEND_NUM_ARGS() == 1 || SUCCESS == pdo_stmt_setup_fetch_mode(INTERNAL_FUNCTION_PARAM_PASSTHRU, stmt, 1)) { - PDO_STMT_CLEAR_ERR(); - /* now execute the statement */ PDO_STMT_CLEAR_ERR(); if (stmt->methods->executer(stmt TSRMLS_CC)) { @@ -1000,13 +1006,14 @@ } } /* something broke */ + dbh->query_stmt = stmt; + dbh->query_stmt_zval = *return_value; + PDO_HANDLE_STMT_ERR(); + } else { + PDO_HANDLE_DBH_ERR(); + zval_dtor(return_value); } - PDO_HANDLE_STMT_ERR(); - - /* kill the object handle for the stmt here */ - zval_dtor(return_value); - RETURN_FALSE; } /* }}} */ http://cvs.php.net/diff.php/php-src/ext/pdo/php_pdo_driver.h?r1=1.66.2.2&r2=1.66.2.3&ty=u Index: php-src/ext/pdo/php_pdo_driver.h diff -u php-src/ext/pdo/php_pdo_driver.h:1.66.2.2 php-src/ext/pdo/php_pdo_driver.h:1.66.2.3 --- php-src/ext/pdo/php_pdo_driver.h:1.66.2.2 Sun Oct 2 16:07:11 2005 +++ php-src/ext/pdo/php_pdo_driver.h Sun Oct 2 18:11:17 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_pdo_driver.h,v 1.66.2.2 2005/10/02 20:07:11 helly Exp $ */ +/* $Id: php_pdo_driver.h,v 1.66.2.3 2005/10/02 22:11:17 wez Exp $ */ #ifndef PHP_PDO_DRIVER_H #define PHP_PDO_DRIVER_H @@ -44,7 +44,7 @@ # define FALSE 0 #endif -#define PDO_DRIVER_API 20050711 +#define PDO_DRIVER_API 20051002 enum pdo_param_type { PDO_PARAM_NULL, @@ -477,8 +477,14 @@ pdo_driver_t *driver; zend_class_entry *def_stmt_ce; - zval *def_stmt_ctor_args; + + /* when calling PDO::query(), we need to keep the error + * context from the statement around until we next clear it. + * This will allow us to report the correct error message + * when PDO::query() fails */ + pdo_stmt_t *query_stmt; + zval query_stmt_zval; }; /* describes a column */ http://cvs.php.net/diff.php/php-src/ext/pdo/php_pdo_int.h?r1=1.17.2.3&r2=1.17.2.4&ty=u Index: php-src/ext/pdo/php_pdo_int.h diff -u php-src/ext/pdo/php_pdo_int.h:1.17.2.3 php-src/ext/pdo/php_pdo_int.h:1.17.2.4 --- php-src/ext/pdo/php_pdo_int.h:1.17.2.3 Sun Oct 2 16:38:18 2005 +++ php-src/ext/pdo/php_pdo_int.h Sun Oct 2 18:11:17 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_pdo_int.h,v 1.17.2.3 2005/10/02 20:38:18 helly Exp $ */ +/* $Id: php_pdo_int.h,v 1.17.2.4 2005/10/02 22:11:17 wez Exp $ */ /* Stuff private to the PDO extension and not for consumption by PDO drivers * */ @@ -57,7 +57,13 @@ extern void pdo_handle_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt TSRMLS_DC); -#define PDO_DBH_CLEAR_ERR() strcpy(dbh->error_code, PDO_ERR_NONE) +#define PDO_DBH_CLEAR_ERR() do { \ + strcpy(dbh->error_code, PDO_ERR_NONE); \ + if (dbh->query_stmt) { \ + dbh->query_stmt = NULL; \ + zend_objects_store_del_ref(&dbh->query_stmt_zval TSRMLS_CC); \ + } \ +} while (0) #define PDO_STMT_CLEAR_ERR() strcpy(stmt->error_code, PDO_ERR_NONE) #define PDO_HANDLE_DBH_ERR() if (strcmp(dbh->error_code, PDO_ERR_NONE)) { pdo_handle_error(dbh, NULL TSRMLS_CC); } #define PDO_HANDLE_STMT_ERR() if (strcmp(stmt->error_code, PDO_ERR_NONE)) { pdo_handle_error(stmt->dbh, stmt TSRMLS_CC); } http://cvs.php.net/co.php/php-src/ext/pdo/tests/bug_34687.phpt?r=1.1&p=1 Index: php-src/ext/pdo/tests/bug_34687.phpt +++ php-src/ext/pdo/tests/bug_34687.phpt

« previous php.cvs (#34232) next »