From: Andrey Hristov Date: Mon, 25 Jan 2010 13:23:32 +0000 (+0000) Subject: Fix for bug#50772 X-Git-Tag: php-5.4.0alpha1~191^2~2041 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4dbaaae9791c604190adb5fc856f10ba7eb88c55;p=php Fix for bug#50772 mysqli constructor without parameters does not return a working mysqli object --- diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index be0146dd64..e4d61310b3 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -1381,9 +1381,9 @@ PHP_FUNCTION(mysqli_info) } /* }}} */ -/* {{{ proto resource mysqli_init(void) U - 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; @@ -1420,6 +1420,16 @@ PHP_FUNCTION(mysqli_init) } /* }}} */ + +/* {{{ proto resource mysqli_init(void) U + 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) U Get the ID generated from the previous INSERT operation */ PHP_FUNCTION(mysqli_insert_id) diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index efd433b8a4..7037cdbcb5 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -75,7 +75,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; diff --git a/ext/mysqli/php_mysqli_structs.h b/ext/mysqli/php_mysqli_structs.h index 8f400a4e5f..ea13d79022 100644 --- a/ext/mysqli/php_mysqli_structs.h +++ b/ext/mysqli/php_mysqli_structs.h @@ -228,6 +228,8 @@ extern void php_mysqli_dtor_p_elements(void *data); extern void php_mysqli_close(MY_MYSQL * mysql, int close_type TSRMLS_DC); +extern void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS); + #ifdef HAVE_SPL extern PHPAPI zend_class_entry *spl_ce_RuntimeException; diff --git a/ext/mysqli/tests/bug50772.phpt b/ext/mysqli/tests/bug50772.phpt new file mode 100644 index 0000000000..4724d0f29e --- /dev/null +++ b/ext/mysqli/tests/bug50772.phpt @@ -0,0 +1,36 @@ +--TEST-- +Bug #50772 (mysqli constructor without parameters does not return a working mysqli object) +--SKIPIF-- + +--FILE-- +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