From: Johannes Schlüter Date: Mon, 12 Jan 2009 12:54:17 +0000 (+0000) Subject: - Fix #45940 MySQLI OO does not populate connect_error property on failed X-Git-Tag: php-5.4.0alpha1~191^2~4553 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=66c17bcca4e153b8b15a8820de4528a3fd728aba;p=php - Fix #45940 MySQLI OO does not populate connect_error property on failed connect --- diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 8921885a69..45b6047c1a 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -347,13 +347,6 @@ zval *mysqli_read_property(zval *object, zval *member, int type TSRMLS_DC) } if (ret == SUCCESS) { - if ((!obj->ptr || ((MYSQLI_RESOURCE *)(obj->ptr))->status < MYSQLI_STATUS_INITIALIZED)) - { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %v", obj->zo.ce->name ); - retval = EG(uninitialized_zval_ptr); - return(retval); - } - ret = hnd->read_func(obj, &retval TSRMLS_CC); if (ret == SUCCESS) { /* ensure we're creating a temporary variable */ diff --git a/ext/mysqli/mysqli_prop.c b/ext/mysqli/mysqli_prop.c index c87187ef97..7cef4ea076 100644 --- a/ext/mysqli/mysqli_prop.c +++ b/ext/mysqli/mysqli_prop.c @@ -32,7 +32,7 @@ #include "php_mysqli_structs.h" #define CHECK_STATUS(value) \ - if (((MYSQLI_RESOURCE *)obj->ptr)->status < value ) { \ + if (!obj->ptr || ((MYSQLI_RESOURCE *)obj->ptr)->status < value ) { \ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Property access is not allowed yet"); \ ZVAL_NULL(*retval); \ return SUCCESS; \ @@ -136,7 +136,6 @@ static int link_client_info_read(mysqli_object *obj, zval **retval TSRMLS_DC) static int link_connect_errno_read(mysqli_object *obj, zval **retval TSRMLS_DC) { MAKE_STD_ZVAL(*retval); - CHECK_STATUS(MYSQLI_STATUS_INITIALIZED); ZVAL_LONG(*retval, (long)MyG(error_no)); return SUCCESS; } @@ -146,8 +145,11 @@ static int link_connect_errno_read(mysqli_object *obj, zval **retval TSRMLS_DC) static int link_connect_error_read(mysqli_object *obj, zval **retval TSRMLS_DC) { MAKE_STD_ZVAL(*retval); - CHECK_STATUS(MYSQLI_STATUS_INITIALIZED); - ZVAL_UTF8_STRING(*retval, MyG(error_msg), ZSTR_DUPLICATE) + if (MyG(error_msg)) { + ZVAL_UTF8_STRING(*retval, MyG(error_msg), ZSTR_DUPLICATE); + } else { + ZVAL_NULL(*retval); + } return SUCCESS; } /* }}} */ @@ -160,6 +162,8 @@ static int link_affected_rows_read(mysqli_object *obj, zval **retval TSRMLS_DC) MAKE_STD_ZVAL(*retval); + CHECK_STATUS(MYSQLI_STATUS_INITIALIZED); + mysql = (MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; if (!mysql) { diff --git a/ext/mysqli/tests/mysqli_fetch_lengths_oo.phpt b/ext/mysqli/tests/mysqli_fetch_lengths_oo.phpt index 77797d4514..3689c69fc4 100644 --- a/ext/mysqli/tests/mysqli_fetch_lengths_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_lengths_oo.phpt @@ -38,6 +38,6 @@ array(2) { } NULL -Warning: main(): Couldn't fetch mysqli_result in %s on line %d +Warning: main(): Property access is not allowed yet in %s on line %d NULL -done! \ No newline at end of file +done! diff --git a/ext/mysqli/tests/mysqli_result_references.phpt b/ext/mysqli/tests/mysqli_result_references.phpt index 70a8ff81a9..32c1fbe936 100644 --- a/ext/mysqli/tests/mysqli_result_references.phpt +++ b/ext/mysqli/tests/mysqli_result_references.phpt @@ -125,7 +125,17 @@ array(7) refcount(2){ &long(4) refcount(2) } [6]=> - &object(mysqli_result)#2 (0) refcount(2){ + &object(mysqli_result)#2 (5) refcount(2){ + ["current_field"]=> + NULL refcount(1) + ["field_count"]=> + NULL refcount(1) + ["lengths"]=> + NULL refcount(1) + ["num_rows"]=> + NULL refcount(1) + ["type"]=> + NULL refcount(1) } } array(1) refcount(2){