]> granicus.if.org Git - php/commitdiff
- Fix #45940 MySQLI OO does not populate connect_error property on failed
authorJohannes Schlüter <johannes@php.net>
Mon, 12 Jan 2009 12:54:17 +0000 (12:54 +0000)
committerJohannes Schlüter <johannes@php.net>
Mon, 12 Jan 2009 12:54:17 +0000 (12:54 +0000)
  connect

ext/mysqli/mysqli.c
ext/mysqli/mysqli_prop.c
ext/mysqli/tests/mysqli_fetch_lengths_oo.phpt
ext/mysqli/tests/mysqli_result_references.phpt

index 8921885a694acfa0d1d9e28a022802ad1d0d5aff..45b6047c1a5d72b1dece06c54cb8ee7a85a4ee63 100644 (file)
@@ -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 */
index c87187ef9795496429530f26ddf0fa8cb16f60d6..7cef4ea076acb1ce3443c437249add9e6c27671f 100644 (file)
@@ -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) {
index 77797d451439c63f2fe279924b784ecf57adf703..3689c69fc4f3c50a307a1fc72a44415c7784faee 100644 (file)
@@ -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!
index 70a8ff81a9b2c6ab13fe4a36d45a21d9e7986da7..32c1fbe9361cc50633c8a25dc6a14f8053ef421c 100644 (file)
@@ -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){