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~390 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6407250e70534234379712a2050efc5ddb437958;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 43b60848ca..5c9cd6e0a2 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -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) diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 9cbf8d2607..b3b0dded08 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -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; diff --git a/ext/mysqli/php_mysqli_structs.h b/ext/mysqli/php_mysqli_structs.h index 7625378579..ecf91518fb 100644 --- a/ext/mysqli/php_mysqli_structs.h +++ b/ext/mysqli/php_mysqli_structs.h @@ -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 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