summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/mysqli/mysqli_api.c23
-rw-r--r--ext/mysqli/mysqli_fe.c2
-rw-r--r--ext/mysqli/mysqli_fe.h1
-rw-r--r--ext/mysqli/mysqli_nonapi.c2
-rw-r--r--ext/mysqli/mysqli_priv.h2
5 files changed, 16 insertions, 14 deletions
diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c
index 95bcd9978c..8eae59b0c1 100644
--- a/ext/mysqli/mysqli_api.c
+++ b/ext/mysqli/mysqli_api.c
@@ -1479,19 +1479,12 @@ PHP_FUNCTION(mysqli_info)
/* }}} */
/* {{{ php_mysqli_init() */
-void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS)
+void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_method)
{
MYSQLI_RESOURCE *mysqli_resource;
MY_MYSQL *mysql;
-// TODO: We can't properly check if this was to mysql_init() in a class method
-// or a call to mysqli->init().
-// To solve the problem, we added instanceof check for the class of $this
-// ???
- if (getThis() &&
- instanceof_function(Z_OBJCE_P(getThis()), mysqli_link_class_entry) &&
- (Z_MYSQLI_P(getThis()))->ptr) {
-//??? if (getThis() && (Z_MYSQLI_P(getThis()))->ptr) {
+ if (is_method && (Z_MYSQLI_P(getThis()))->ptr) {
return;
}
@@ -1515,7 +1508,7 @@ void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS)
mysqli_resource->ptr = (void *)mysql;
mysqli_resource->status = MYSQLI_STATUS_INITIALIZED;
- if (!getThis() || !instanceof_function(Z_OBJCE_P(getThis()), mysqli_link_class_entry)) {
+ if (!is_method) {
MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_link_class_entry);
} else {
(Z_MYSQLI_P(getThis()))->ptr = mysqli_resource;
@@ -1527,7 +1520,15 @@ void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS)
Initialize mysqli and return a resource for use with mysql_real_connect */
PHP_FUNCTION(mysqli_init)
{
- php_mysqli_init(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ php_mysqli_init(INTERNAL_FUNCTION_PARAM_PASSTHRU, FALSE);
+}
+/* }}} */
+
+/* {{{ proto resource mysqli::init(void)
+ Initialize mysqli and return a resource for use with mysql_real_connect */
+PHP_FUNCTION(mysqli_init_method)
+{
+ php_mysqli_init(INTERNAL_FUNCTION_PARAM_PASSTHRU, TRUE);
}
/* }}} */
diff --git a/ext/mysqli/mysqli_fe.c b/ext/mysqli/mysqli_fe.c
index cacda52da0..f69491f825 100644
--- a/ext/mysqli/mysqli_fe.c
+++ b/ext/mysqli/mysqli_fe.c
@@ -548,7 +548,7 @@ const zend_function_entry mysqli_link_methods[] = {
#endif
PHP_FALIAS(get_server_info, mysqli_get_server_info, arginfo_mysqli_no_params)
PHP_FALIAS(get_warnings, mysqli_get_warnings, arginfo_mysqli_no_params)
- PHP_FALIAS(init,mysqli_init, arginfo_mysqli_no_params)
+ PHP_FALIAS(init,mysqli_init_method, arginfo_mysqli_no_params)
PHP_FALIAS(kill,mysqli_kill, arginfo_class_mysqli_kill)
PHP_FALIAS(multi_query, mysqli_multi_query, arginfo_class_mysqli_query)
PHP_FALIAS(mysqli, mysqli_link_construct, arginfo_mysqli_connect)
diff --git a/ext/mysqli/mysqli_fe.h b/ext/mysqli/mysqli_fe.h
index d55a3c4ec7..4710bb128f 100644
--- a/ext/mysqli/mysqli_fe.h
+++ b/ext/mysqli/mysqli_fe.h
@@ -68,6 +68,7 @@ PHP_FUNCTION(mysqli_get_warnings);
PHP_FUNCTION(mysqli_info);
PHP_FUNCTION(mysqli_insert_id);
PHP_FUNCTION(mysqli_init);
+PHP_FUNCTION(mysqli_init_method);
PHP_FUNCTION(mysqli_kill);
PHP_FUNCTION(mysqli_link_construct);
PHP_FUNCTION(mysqli_set_local_infile_default);
diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c
index 99e7006b1a..36368755de 100644
--- a/ext/mysqli/mysqli_nonapi.c
+++ b/ext/mysqli/mysqli_nonapi.c
@@ -81,7 +81,7 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
#endif
if (getThis() && !ZEND_NUM_ARGS() && in_ctor) {
- php_mysqli_init(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ php_mysqli_init(INTERNAL_FUNCTION_PARAM_PASSTHRU, in_ctor);
return;
}
hostname = username = dbname = passwd = socket = NULL;
diff --git a/ext/mysqli/mysqli_priv.h b/ext/mysqli/mysqli_priv.h
index aa8b14a7cd..2f994fb12c 100644
--- a/ext/mysqli/mysqli_priv.h
+++ b/ext/mysqli/mysqli_priv.h
@@ -146,6 +146,6 @@ 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);
+void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_method);
#endif /* MYSQLI_PRIV_H */