Fix for bug#50772

mysqli constructor without parameters does not return a working mysqli object
This commit is contained in:
Andrey Hristov 2010-01-25 13:23:32 +00:00
parent db8a6974fb
commit 6407250e70
4 changed files with 52 additions and 4 deletions

View 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)

View 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;

View 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;

View File

@ -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