]> granicus.if.org Git - php/commitdiff
Fix for bug#50772
authorAndrey Hristov <andrey@php.net>
Mon, 25 Jan 2010 13:23:32 +0000 (13:23 +0000)
committerAndrey Hristov <andrey@php.net>
Mon, 25 Jan 2010 13:23:32 +0000 (13:23 +0000)
mysqli constructor without parameters does not return a working mysqli object

ext/mysqli/mysqli_api.c
ext/mysqli/mysqli_nonapi.c
ext/mysqli/php_mysqli_structs.h
ext/mysqli/tests/bug50772.phpt [new file with mode: 0644]

index 43b60848ca362dada91b6802906f1cdd3d05b0da..5c9cd6e0a29a58cf9382edb151c50b16559d8ffc 100644 (file)
@@ -1333,9 +1333,9 @@ PHP_FUNCTION(mysqli_info)
 }
 /* }}} */
 
-/* {{{ proto resource mysqli_init(void)
-   Initialize mysqli and return a resource for use with mysql_real_connect */
-PHP_FUNCTION(mysqli_init)
+
+/* {{{ php_mysqli_init() */
+void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS)
 {
        MYSQLI_RESOURCE *mysqli_resource;
        MY_MYSQL *mysql;
@@ -1372,6 +1372,15 @@ PHP_FUNCTION(mysqli_init)
 }
 /* }}} */
 
+
+/* {{{ proto resource mysqli_init(void)
+   Initialize mysqli and return a resource for use with mysql_real_connect */
+PHP_FUNCTION(mysqli_init)
+{
+       php_mysqli_init(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+}
+/* }}} */
+
 /* {{{ proto mixed mysqli_insert_id(object link)
    Get the ID generated from the previous INSERT operation */
 PHP_FUNCTION(mysqli_insert_id)
index 9cbf8d2607fa5ec8de5b559a195b80c7ebe0023b..b3b0dded08538075195e9e3d476d4986405d59b7 100644 (file)
@@ -80,7 +80,8 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
 #endif
 
        if (getThis() && !ZEND_NUM_ARGS() && in_ctor) {
-               RETURN_NULL();
+               php_mysqli_init(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+               return;
        }
        hostname = username = dbname = passwd = socket = NULL;
 
index 76253785794c0495031d5564687e766c0085d4db..ecf91518fb86b86cb9d154fe3f6e85d00e044ad7 100644 (file)
@@ -338,6 +338,8 @@ if ((MyG(report_mode) & MYSQLI_REPORT_ERROR) && mysql_stmt_errno(stmt)) { \
 
 void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_connect, zend_bool in_ctor);
 
+void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS);
+
 
 ZEND_BEGIN_MODULE_GLOBALS(mysqli)
        long                    default_link;
diff --git a/ext/mysqli/tests/bug50772.phpt b/ext/mysqli/tests/bug50772.phpt
new file mode 100644 (file)
index 0000000..4724d0f
--- /dev/null
@@ -0,0 +1,36 @@
+--TEST--
+Bug #50772 (mysqli constructor without parameters does not return a working mysqli object)
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifconnectfailure.inc');
+?>
+--FILE--
+<?php
+       include "connect.inc";
+       $db1 = new mysqli();
+
+       // These calls fail
+       $db1->options(MYSQLI_OPT_CONNECT_TIMEOUT, 3);
+       $db1->real_connect($host, $user, $passwd);
+       if(mysqli_connect_error()) {
+               echo "error 1\n";
+       } else {
+               echo "ok 1\n";
+       }
+
+       $db2 = mysqli_init();
+
+       $db2->options(MYSQLI_OPT_CONNECT_TIMEOUT, 3);
+       $db2->real_connect($host, $user, $passwd);
+       if(mysqli_connect_error()) {
+               echo "error 2\n";
+       } else {
+               echo "ok 2\n";
+       }
+       echo "done\n";
+?>
+--EXPECTF--
+ok 1
+ok 2
+done
\ No newline at end of file