diff options
Diffstat (limited to 'ext/mysqli/mysqli_api.c')
| -rw-r--r-- | ext/mysqli/mysqli_api.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 07bc303d72..4061d09757 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -552,22 +552,12 @@ PHP_FUNCTION(mysqli_character_set_name) } /* }}} */ -/* {{{ proto bool mysqli_close(object link) - Close connection */ -PHP_FUNCTION(mysqli_close) -{ - zval *mysql_link; - MY_MYSQL *mysql; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { - return; - } - - MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_INITIALIZED); +/* {{{ php_mysqli_close */ +void php_mysqli_close(MY_MYSQL * mysql, int close_type TSRMLS_DC) +{ if (!mysql->persistent) { - mysqli_close(mysql->mysql, MYSQLI_CLOSE_EXPLICIT); - mysql->mysql = NULL; + mysqli_close(mysql->mysql, close_type); } else { zend_rsrc_list_entry *le; if (zend_hash_find(&EG(persistent_list), mysql->hash_key, strlen(mysql->hash_key) + 1, (void **)&le) == SUCCESS) { @@ -580,9 +570,29 @@ PHP_FUNCTION(mysqli_close) MyG(num_inactive_persistent)++; } } + mysql->persistent = FALSE; } + mysql->mysql = NULL; php_clear_mysql(mysql); +} +/* }}} */ + + +/* {{{ proto bool mysqli_close(object link) + Close connection */ +PHP_FUNCTION(mysqli_close) +{ + zval *mysql_link; + MY_MYSQL *mysql; + + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + return; + } + + MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_INITIALIZED); + + php_mysqli_close(mysql, MYSQLI_CLOSE_EXPLICIT TSRMLS_CC); MYSQLI_CLEAR_RESOURCE(&mysql_link); efree(mysql); |
