Browse Source

Fix for bug#50772

mysqli constructor without parameters does not return a working mysqli object
experimental/first_unicode_implementation
Andrey Hristov 16 years ago
parent
commit
4dbaaae979
  1. 16
      ext/mysqli/mysqli_api.c
  2. 3
      ext/mysqli/mysqli_nonapi.c
  3. 2
      ext/mysqli/php_mysqli_structs.h
  4. 36
      ext/mysqli/tests/bug50772.phpt

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

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

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

36
ext/mysqli/tests/bug50772.phpt

@ -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
Loading…
Cancel
Save