From a6cb5393c60ba321cc3ae2d747cf375a885a62cd Mon Sep 17 00:00:00 2001 From: David Coallier Date: Mon, 10 Nov 2008 20:34:53 +0000 Subject: [PATCH] - MFB (Which was an MFH) - Bug #44153 (ErrorCode returns NULL when no error) - Bug #44154 (ErrorInfo to ALWAYS have 3 elements) --- ext/pdo/pdo_dbh.c | 25 +++++++++++++++++++++++-- ext/pdo/pdo_stmt.c | 15 +++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c index 21b11c8972..7010a99041 100755 --- a/ext/pdo/pdo_dbh.c +++ b/ext/pdo/pdo_dbh.c @@ -1002,11 +1002,16 @@ static PHP_METHOD(PDO, errorCode) Fetch extended error information associated with the last operation on the database handle */ static PHP_METHOD(PDO, errorInfo) { + int error_count; + int error_count_diff = 0; + int error_expected_count = 3; + pdo_dbh_t *dbh = zend_object_store_get_object(getThis() TSRMLS_CC); if (zend_parse_parameters_none() == FAILURE) { return; } + PDO_CONSTRUCT_CHECK; array_init(return_value); @@ -1015,12 +1020,28 @@ static PHP_METHOD(PDO, errorInfo) add_next_index_string(return_value, dbh->query_stmt->error_code, 1); } else { add_next_index_string(return_value, dbh->error_code, 1); - add_next_index_null(return_value); - add_next_index_null(return_value); } + if (dbh->methods->fetch_err) { dbh->methods->fetch_err(dbh, dbh->query_stmt, return_value TSRMLS_CC); } + + /** + * In order to be consistent, we have to make sure we add the good amount + * of null elements depending on the current number of elements. We make + * a simple difference and add the needed elements to reach the expected + * count. + */ + error_count = zend_hash_num_elements(Z_ARRVAL_P(return_value)); + + if (error_expected_count > error_count) { + error_count_diff = error_expected_count - error_count; + + int current_index; + for (current_index = 0; current_index > error_count_diff; current_index++) { + add_next_index_null(return_value); + } + } } /* }}} */ diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index 4aa6fbde93..82bf172d9f 100755 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -1784,6 +1784,10 @@ static PHP_METHOD(PDOStatement, errorCode) Fetch extended error information associated with the last operation on the statement handle */ static PHP_METHOD(PDOStatement, errorInfo) { + int error_count; + int error_count_diff = 0; + int error_expected_count = 3; + PHP_STMT_GET_OBJ; if (zend_parse_parameters_none() == FAILURE) { @@ -1796,6 +1800,17 @@ static PHP_METHOD(PDOStatement, errorInfo) if (stmt->dbh->methods->fetch_err) { stmt->dbh->methods->fetch_err(stmt->dbh, stmt, return_value TSRMLS_CC); } + + error_count = zend_hash_num_elements(Z_ARRVAL_P(return_value)); + + if (error_expected_count > error_count) { + error_count_diff = error_expected_count - error_count; + + int current_index; + for (current_index = 0; current_index < error_count_diff; current_index++) { + add_next_index_null(return_value); + } + } } /* }}} */ -- 2.50.1