From: Georg Richter Date: Sat, 17 May 2003 14:15:58 +0000 (+0000) Subject: added ext/mysqli for PHP4. This version doesn't support OO-function calls X-Git-Tag: BEFORE_FD_REVERT~53 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ac88c9cabd79bc6d137af5815c67ebe5c72ada82;p=php added ext/mysqli for PHP4. This version doesn't support OO-function calls --- diff --git a/ext/mysqli/config.m4 b/ext/mysqli/config.m4 index 2c32818e50..c646a084fb 100644 --- a/ext/mysqli/config.m4 +++ b/ext/mysqli/config.m4 @@ -41,5 +41,5 @@ if test "$PHP_MYSQLI" != "no"; then ]) PHP_SUBST(MYSQLI_SHARED_LIBADD) - PHP_NEW_EXTENSION(mysqli, mysqli.c mysqli_api.c mysqli_nonapi.c mysqli_fe.c mysqli_profiler.c mysqli_profiler_com.c, $ext_shared) + PHP_NEW_EXTENSION(mysqli, mysqli.c mysqli_api.c mysqli_nonapi.c mysqli_fe.c, $ext_shared) fi diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index f5b856c08c..8f2f7ea8e0 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -34,8 +34,7 @@ #define MYSQLI_USE_RESULT 1 ZEND_DECLARE_MODULE_GLOBALS(mysqli) -static zend_object_handlers mysqli_object_handlers; -PR_MAIN *prmain; +int le_mysqli_link, le_mysqli_result, le_mysqli_stmt; /* {{{ php_clear_stmt_bind */ void php_clear_stmt_bind(STMT *stmt) @@ -68,65 +67,6 @@ void php_clear_stmt_bind(STMT *stmt) } /* }}} */ -/* {{{ mysqli_objects_dtor - */ -static void mysqli_objects_dtor(void *object, zend_object_handle handle TSRMLS_DC) -{ - mysqli_object *intern = (mysqli_object *)object; - MYSQLI_RESOURCE *my_res = (MYSQLI_RESOURCE *)intern->ptr; - - /* link object */ - if (intern->zo.ce == mysqli_link_class_entry) { - if (my_res && my_res->ptr) { - mysql_close(my_res->ptr); - } - } else if (intern->zo.ce == mysqli_stmt_class_entry) { /* stmt object */ - if (my_res && my_res->ptr) { - php_clear_stmt_bind((STMT *)my_res->ptr); - } - } else if (intern->zo.ce == mysqli_result_class_entry) { /* result object */ - if (my_res && my_res->ptr) { - mysql_free_result(my_res->ptr); - } - } - my_efree(my_res); - zend_objects_destroy_object(object, handle TSRMLS_CC); -} -/* }}} */ - -/* {{{ mysqli_objects_clone - */ -static void mysqli_objects_clone(void *object, void **object_clone TSRMLS_DC) -{ - /* TODO */ -} -/* }}} */ - -/* {{{ mysqli_objects_new - */ -PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry *class_type TSRMLS_DC) -{ - zend_object_value retval; - mysqli_object *intern; - zval *tmp; - - intern = emalloc(sizeof(mysqli_object)); - intern->zo.ce = class_type; - intern->zo.in_get = 0; - intern->zo.in_set = 0; - intern->ptr = NULL; - - ALLOC_HASHTABLE(intern->zo.properties); - zend_hash_init(intern->zo.properties, 0, NULL, ZVAL_PTR_DTOR, 0); - zend_hash_copy(intern->zo.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); - - retval.handle = zend_objects_store_put(intern, mysqli_objects_dtor, mysqli_objects_clone TSRMLS_CC); - retval.handlers = &mysqli_object_handlers; - - return retval; -} -/* }}} */ - /* {{{ mysqli_module_entry */ zend_module_entry mysqli_module_entry = { @@ -154,11 +94,11 @@ ZEND_GET_MODULE(mysqli) /* {{{ PHP_INI_BEGIN */ PHP_INI_BEGIN() - STD_PHP_INI_ENTRY_EX("mysqli.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_links, zend_mysqli_globals, mysqli_globals, display_link_numbers) + STD_PHP_INI_ENTRY_EX("mysqli.max_links", "-1", PHP_INI_SYSTEM, OnUpdateInt, max_links, zend_mysqli_globals, mysqli_globals, display_link_numbers) STD_PHP_INI_ENTRY("mysqli.default_host", NULL, PHP_INI_ALL, OnUpdateString, default_host, zend_mysqli_globals, mysqli_globals) STD_PHP_INI_ENTRY("mysqli.default_user", NULL, PHP_INI_ALL, OnUpdateString, default_user, zend_mysqli_globals, mysqli_globals) STD_PHP_INI_ENTRY("mysqli.default_pw", NULL, PHP_INI_ALL, OnUpdateString, default_pw, zend_mysqli_globals, mysqli_globals) - STD_PHP_INI_ENTRY("mysqli.default_port", "3306", PHP_INI_ALL, OnUpdateLong, default_port, zend_mysqli_globals, mysqli_globals) + STD_PHP_INI_ENTRY("mysqli.default_port", "3306", PHP_INI_ALL, OnUpdateInt, default_port, zend_mysqli_globals, mysqli_globals) STD_PHP_INI_ENTRY("mysqli.default_socket", NULL, PHP_INI_ALL, OnUpdateStringUnempty, default_socket, zend_mysqli_globals, mysqli_globals) PHP_INI_END() @@ -175,7 +115,35 @@ static void php_mysqli_init_globals(zend_mysqli_globals *mysqli_globals) mysqli_globals->default_user = NULL; mysqli_globals->default_pw = NULL; mysqli_globals->default_socket = NULL; - mysqli_globals->profiler = 0; +} +/* }}} */ + +/* {{{ _close_link */ +static void _close_link(zend_rsrc_list_entry *rsrc TSRMLS_DC) +{ + MYSQL *mysql = (MYSQL *)rsrc->ptr; + void (*handler) (int); + + handler = signal(SIGPIPE, SIG_IGN); + mysql_close(mysql); + mysql = NULL; + signal(SIGPIPE, handler); +} +/* }}} */ + +/* {{{ _close_result */ +static void _close_result(zend_rsrc_list_entry *rsrc TSRMLS_DC) +{ + MYSQL_RES *result = (MYSQL_RES *)rsrc->ptr; + mysql_free_result(result); +} +/* }}} */ + +/* {{{ _close_stmt */ +static void _close_stmt(zend_rsrc_list_entry *rsrc TSRMLS_DC) +{ + STMT *stmt = (STMT *)rsrc->ptr; + php_clear_stmt_bind(stmt); } /* }}} */ @@ -187,12 +155,10 @@ PHP_MINIT_FUNCTION(mysqli) ZEND_INIT_MODULE_GLOBALS(mysqli, php_mysqli_init_globals, NULL); REGISTER_INI_ENTRIES(); - memcpy(&mysqli_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); - mysqli_object_handlers.clone_obj = zend_objects_store_clone_obj; - - REGISTER_MYSQLI_CLASS_ENTRY("mysqli", mysqli_link_class_entry, mysqli_link_methods); - REGISTER_MYSQLI_CLASS_ENTRY("mysqli_result", mysqli_result_class_entry, mysqli_result_methods); - REGISTER_MYSQLI_CLASS_ENTRY("mysqli_stmt", mysqli_stmt_class_entry, mysqli_stmt_methods); + /* register destructors */ + le_mysqli_link = zend_register_list_destructors_ex (_close_link, NULL, "mysqli_link", module_number); + le_mysqli_result = zend_register_list_destructors_ex (_close_result, NULL, "mysqli_result", module_number); + le_mysqli_stmt = zend_register_list_destructors_ex (_close_stmt, NULL, "mysqli_stmt", module_number); /* mysqli_options */ REGISTER_LONG_CONSTANT("MYSQLI_READ_DEFAULT_GROUP", MYSQL_READ_DEFAULT_GROUP, CONST_CS | CONST_PERSISTENT); @@ -277,11 +243,6 @@ PHP_MINIT_FUNCTION(mysqli) REGISTER_LONG_CONSTANT("MYSQLI_NEED_DATA", MYSQL_NEED_DATA, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("MYSQLI_NO_DATA", MYSQL_NO_DATA, CONST_CS | CONST_PERSISTENT); - /* profiler support */ - REGISTER_LONG_CONSTANT("MYSQLI_PR_REPORT_STDERR", 1, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("MYSQLI_PR_REPORT_PORT", 2, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("MYSQLI_PR_REPORT_FILE", 3, CONST_CS | CONST_PERSISTENT); - return SUCCESS; } /* }}} */ @@ -318,18 +279,6 @@ PHP_RSHUTDOWN_FUNCTION(mysqli) efree(MyG(error_msg)); } - if (MyG(profiler)) { - if (prmain->header.child) { - php_mysqli_profiler_report((PR_COMMON *)prmain, 0); - } - switch (prmain->mode) { - case MYSQLI_PR_REPORT_FILE: - fclose(prmain->fp); - efree(prmain->name); - break; - } - } - return SUCCESS; } /* }}} */ @@ -362,10 +311,8 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags MYSQL_FIELD *fields; MYSQL_ROW row; unsigned long *field_len; - PR_RESULT *prresult; - PR_COMMAND *prcommand; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|l", &mysql_result, mysqli_result_class_entry, &fetchtype) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &mysql_result, &fetchtype) == FAILURE) { return; } @@ -377,9 +324,7 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags fetchtype = override_flags; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result"); - - MYSQLI_PROFILER_COMMAND_START(prcommand, prresult); + ZEND_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, -1, "mysqli_result", le_mysqli_result); fields = mysql_fetch_fields(result); if (!(row = mysql_fetch_row(result))) { @@ -419,13 +364,6 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags } } } - - if (MyG(profiler)) { - char tmp[10]; - sprintf ((char *)&tmp,"row[%d]", mysql_num_fields(result)); - MYSQLI_PROFILER_COMMAND_RETURNSTRING(prcommand, tmp); - prresult->fetched_rows++; - } } /* }}} */ diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index c4638ac71c..a1802a6b06 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -36,19 +36,15 @@ PHP_FUNCTION(mysqli_affected_rows) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; my_ulonglong rc; - PR_COMMAND *prcommand; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; /* Should this be RETURN_FALSE? */ } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); - MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql); rc = mysql_affected_rows(mysql); - MYSQLI_PROFILER_COMMAND_RETURNLONG(prcommand, (long)rc); MYSQLI_RETURN_LONG_LONG(rc); } /* }}} */ @@ -59,19 +55,15 @@ PHP_FUNCTION(mysqli_autocommit) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - PR_COMMAND *prcommand; unsigned long rc; unsigned long automode; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ob", &mysql_link, mysqli_link_class_entry, &automode) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rb", &mysql_link, &automode) == FAILURE) { return; /* Should this be RETURN_FALSE? */ } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); - MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql); rc = (long) mysql_autocommit(mysql, automode); - MYSQLI_PROFILER_COMMAND_RETURNLONG(prcommand, rc); RETURN_BOOL(rc); } @@ -89,9 +81,6 @@ PHP_FUNCTION(mysqli_bind_param) int ofs; STMT *stmt; MYSQL_BIND *bind; - zval **object; - PR_STMT *prstmt; - PR_COMMAND *prcommand; unsigned long rc; /* calculate and check number of parameters */ @@ -118,18 +107,13 @@ PHP_FUNCTION(mysqli_bind_param) WRONG_PARAM_COUNT; } - if (!getThis()) { - if (Z_TYPE_PP(args[0]) != IS_OBJECT) { - efree(args); - RETURN_FALSE; - } - MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, args[0], "mysqli_stmt"); - start = 1; - } else { - object = &(getThis()); - MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, object, "mysqli_stmt"); + if (Z_TYPE_PP(args[0]) != IS_RESOURCE) { + efree(args); + RETURN_FALSE; } + MYSQLI_FETCH_STMT(stmt, STMT *, args[0], -1, "mysqli_stmt", le_mysqli_stmt); + start = 1; /* prevent leak if variables are already bound */ #if HHOLZGRA_0 @@ -190,9 +174,7 @@ PHP_FUNCTION(mysqli_bind_param) } } - MYSQLI_PROFILER_COMMAND_START(prcommand, prstmt); rc = mysql_bind_param(stmt->stmt, bind); - MYSQLI_PROFILER_COMMAND_RETURNLONG(prcommand, rc); if (rc) { efree(args); @@ -229,7 +211,6 @@ PHP_FUNCTION(mysqli_bind_result) { zval ***args; int argc = ZEND_NUM_ARGS(); - zval **object; int i; int start = 0; int var_cnt; @@ -238,10 +219,8 @@ PHP_FUNCTION(mysqli_bind_result) ulong rc; STMT *stmt; MYSQL_BIND *bind; - PR_STMT *prstmt; - PR_COMMAND *prcommand; - if (argc < (getThis() ? 1 : 2)) { + if (argc < 2) { WRONG_PARAM_COUNT; } @@ -252,17 +231,12 @@ PHP_FUNCTION(mysqli_bind_result) WRONG_PARAM_COUNT; } - if (!getThis()) { - if (Z_TYPE_PP(args[0]) != IS_OBJECT) { - efree(args); - RETURN_FALSE; - } - MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, args[0], "mysqli_stmt"); - start = 1; - } else { - object = &(getThis()); - MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, object, "mysqli_stmt"); + if (Z_TYPE_PP(args[0]) != IS_RESOURCE) { + efree(args); + RETURN_FALSE; } + MYSQLI_FETCH_STMT(stmt, STMT *, args[0], -1, "mysqli_stmt", le_mysqli_stmt); + start = 1; var_cnt = argc - start; @@ -349,9 +323,7 @@ PHP_FUNCTION(mysqli_bind_result) } } - MYSQLI_PROFILER_COMMAND_START(prcommand, prstmt); rc = mysql_bind_result(stmt->stmt, bind); - MYSQLI_PROFILER_COMMAND_RETURNLONG(prcommand, rc); if (rc) { efree(bind); @@ -384,17 +356,13 @@ PHP_FUNCTION(mysqli_change_user) char *user, *password, *dbname; int user_len, password_len, dbname_len; ulong rc; - PR_COMMAND *prcommand; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Osss", &mysql_link, mysqli_link_class_entry, &user, &user_len, &password, &password_len, &dbname, &dbname_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsss", &mysql_link, &user, &user_len, &password, &password_len, &dbname, &dbname_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); - MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql); rc = mysql_change_user(mysql, user, password, dbname); - MYSQLI_PROFILER_COMMAND_RETURNLONG(prcommand, rc); if (rc) { RETURN_FALSE; } @@ -409,19 +377,15 @@ PHP_FUNCTION(mysqli_character_set_name) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; char *charsetname; - PR_COMMAND *prcommand; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); - MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql); charsetname = (char *)mysql_character_set_name(mysql); - MYSQLI_PROFILER_COMMAND_RETURNSTRING(prcommand, charsetname); RETURN_STRING(charsetname, 1); } @@ -432,26 +396,15 @@ PHP_FUNCTION(mysqli_character_set_name) PHP_FUNCTION(mysqli_close) { zval *mysql_link; - PR_MYSQL *prmysql; MYSQL *mysql; - PR_COMMON *current; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); - mysql_close(mysql); - - if (MyG(profiler)) { - prmysql->closed = 1; - } - current = (PR_COMMON *)prmysql; - if (MyG(profiler)) { - php_mysqli_profiler_report(current, 0); - } - MYSQLI_CLEAR_RESOURCE(&mysql_link); + zend_list_delete(Z_RESVAL_PP(&mysql_link)); RETURN_TRUE; } /* }}} */ @@ -462,17 +415,13 @@ PHP_FUNCTION(mysqli_commit) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - PR_COMMAND *prcommand; ulong rc; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); - MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); rc = mysql_commit(mysql); - MYSQLI_PROFILER_COMMAND_RETURNLONG(prcommand, rc); RETURN_BOOL(rc); } /* }}} */ @@ -483,24 +432,20 @@ PHP_FUNCTION(mysqli_data_seek) { MYSQL_RES *result; zval *mysql_result; - PR_RESULT *prresult; - PR_COMMAND *prcommand; long offset; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Orl", &mysql_result, mysqli_result_class_entry, &mysql_result, &offset) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rrl", &mysql_result, &mysql_result, &offset) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result"); + ZEND_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, -1, "mysqli_result", le_mysqli_result); if (result->handle && result->handle->status == MYSQL_STATUS_USE_RESULT) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Function cannot be used with MYSQL_USE_RESULT"); RETURN_LONG(0); } - MYSQLI_PROFILER_COMMAND_START(prcommand, prresult); mysql_data_seek(result, offset); - MYSQLI_PROFILER_COMMAND_RETURNSTRING(prcommand, NULL); return; } /* }}} */ @@ -511,15 +456,12 @@ PHP_FUNCTION(mysqli_debug) { char *debug; int debug_len; - PR_COMMAND *prcommand; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &debug, &debug_len) == FAILURE) { return; } - MYSQLI_PROFILER_COMMAND_START(prcommand, prmain); mysql_debug(debug); - MYSQLI_PROFILER_COMMAND_RETURNSTRING(prcommand, NULL); RETURN_TRUE; } /* }}} */ @@ -530,16 +472,12 @@ PHP_FUNCTION(mysqli_disable_reads_from_master) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - PR_COMMAND *prcommand; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); - MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); mysql_disable_reads_from_master(mysql); - MYSQLI_PROFILER_COMMAND_RETURNSTRING(prcommand, NULL); RETURN_TRUE; } /* }}} */ @@ -550,16 +488,12 @@ PHP_FUNCTION(mysqli_disable_rpl_parse) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - PR_COMMAND *prcommand; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); - MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); mysql_disable_rpl_parse(mysql); - MYSQLI_PROFILER_COMMAND_RETURNSTRING(prcommand, NULL); RETURN_TRUE; } /* }}} */ @@ -570,18 +504,14 @@ PHP_FUNCTION(mysqli_dump_debug_info) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - PR_COMMAND *prcommand; ulong rc; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); - MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql); rc = mysql_dump_debug_info(mysql); - MYSQLI_PROFILER_COMMAND_RETURNLONG(prcommand, rc); if (rc) { RETURN_FALSE; @@ -596,17 +526,13 @@ PHP_FUNCTION(mysqli_enable_reads_from_master) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - PR_COMMAND *prcommand; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); - MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql); mysql_enable_reads_from_master(mysql); - MYSQLI_PROFILER_COMMAND_RETURNSTRING(prcommand, NULL); RETURN_TRUE; } /* }}} */ @@ -617,17 +543,13 @@ PHP_FUNCTION(mysqli_enable_rpl_parse) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - PR_COMMAND *prcommand; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); - MYSQLI_PROFILER_COMMAND_START(prcommand, prmysql); mysql_enable_rpl_parse(mysql); - MYSQLI_PROFILER_COMMAND_RETURNSTRING(prcommand, NULL); RETURN_TRUE; } /* }}} */ @@ -638,12 +560,11 @@ PHP_FUNCTION(mysqli_errno) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); RETURN_LONG(mysql_errno(mysql)); } /* }}} */ @@ -654,12 +575,11 @@ PHP_FUNCTION(mysqli_error) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); RETURN_STRING((char *)mysql_error(mysql),1); } /* }}} */ @@ -671,12 +591,11 @@ PHP_FUNCTION(mysqli_execute) STMT *stmt; zval *mysql_stmt; unsigned int i; - PR_STMT *prstmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_stmt) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt"); + MYSQLI_FETCH_STMT(stmt, STMT *, &mysql_stmt, -1, "mysqli_stmt", le_mysqli_stmt); if (stmt->type == FETCH_SIMPLE) { for (i = 0; i < stmt->var_cnt; i++) { @@ -716,12 +635,11 @@ PHP_FUNCTION(mysqli_fetch) zval *mysql_stmt; unsigned int i; ulong ret; - PR_STMT *prstmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_stmt) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt"); + MYSQLI_FETCH_STMT(stmt, STMT *, &mysql_stmt, -1, "mysqli_stmt", le_mysqli_stmt); /* reset buffers */ @@ -785,13 +703,12 @@ PHP_FUNCTION(mysqli_fetch_field) MYSQL_RES *result; zval *mysql_result; MYSQL_FIELD *field; - PR_RESULT *prresult; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_result) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result"); + ZEND_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, -1, "mysqli_result", le_mysqli_result); if (!(field = mysql_fetch_field(result))) { RETURN_FALSE; @@ -819,15 +736,14 @@ PHP_FUNCTION(mysqli_fetch_fields) zval *mysql_result; MYSQL_FIELD *field; zval *obj; - PR_RESULT *prresult; unsigned int i; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_result) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result"); + ZEND_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, -1, "mysqli_result", le_mysqli_result); if (!(field = mysql_fetch_field(result))) { RETURN_FALSE; @@ -865,13 +781,12 @@ PHP_FUNCTION(mysqli_fetch_field_direct) zval *mysql_result; MYSQL_FIELD *field; int offset; - PR_RESULT *prresult; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_result, mysqli_result_class_entry, &offset) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &mysql_result, &offset) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result"); + ZEND_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, -1, "mysqli_result", le_mysqli_result); if (!(field = mysql_fetch_field_direct(result,offset))) { RETURN_FALSE; @@ -899,14 +814,12 @@ PHP_FUNCTION(mysqli_fetch_lengths) zval *mysql_result; unsigned int i; unsigned long *ret; - PR_RESULT *prresult; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_result) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result"); + ZEND_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, -1, "mysqli_result", le_mysqli_result); if (!(ret = mysql_fetch_lengths(result))) { RETURN_FALSE; @@ -935,12 +848,11 @@ PHP_FUNCTION(mysqli_field_count) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); RETURN_LONG(mysql_field_count(mysql)); } @@ -954,12 +866,11 @@ PHP_FUNCTION(mysqli_field_seek) MYSQL_RES *result; zval *mysql_result; unsigned int fieldnr; - PR_RESULT *prresult; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_result, mysqli_result_class_entry, &fieldnr) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &mysql_result, &fieldnr) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result"); + ZEND_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, -1, "mysqli_result", le_mysqli_result); if (fieldnr < 0 || fieldnr >= mysql_num_fields(result)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field offset is invalid for resultset"); @@ -977,12 +888,11 @@ PHP_FUNCTION(mysqli_field_tell) { MYSQL_RES *result; zval *mysql_result; - PR_RESULT *prresult; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_result) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result"); + ZEND_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, -1, "mysqli_result", le_mysqli_result); RETURN_LONG(mysql_field_tell(result)); } @@ -994,18 +904,13 @@ PHP_FUNCTION(mysqli_free_result) { MYSQL_RES *result; zval *mysql_result; - PR_RESULT *prresult; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_result) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result"); + ZEND_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, -1, "mysqli_result", le_mysqli_result); - mysql_free_result(result); - if (MyG(profiler)) { - prresult->closed = 1; - } - MYSQLI_CLEAR_RESOURCE(&mysql_result); + zend_list_delete(Z_RESVAL_PP(&mysql_result)); RETURN_TRUE; } @@ -1025,12 +930,11 @@ PHP_FUNCTION(mysqli_get_host_info) { MYSQL *mysql; zval *mysql_link = NULL; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); RETURN_STRING((char *)mysql_get_host_info(mysql), 1); } @@ -1042,12 +946,11 @@ PHP_FUNCTION(mysqli_get_proto_info) { MYSQL *mysql; zval *mysql_link = NULL; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); RETURN_LONG(mysql_get_proto_info(mysql)); } @@ -1059,12 +962,11 @@ PHP_FUNCTION(mysqli_get_server_info) { MYSQL *mysql; zval *mysql_link = NULL; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); RETURN_STRING((char *)mysql_get_server_info(mysql), 1); } @@ -1077,12 +979,11 @@ PHP_FUNCTION(mysqli_get_server_version) { MYSQL *mysql; zval *mysql_link = NULL; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); RETURN_LONG(mysql_get_server_version(mysql)); } @@ -1096,12 +997,11 @@ PHP_FUNCTION(mysqli_info) MYSQL *mysql; char *info = NULL; zval *mysql_link = NULL; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); if (!(info = (char *)mysql_info(mysql))) { RETURN_FALSE; @@ -1115,9 +1015,10 @@ PHP_FUNCTION(mysqli_info) Initialize mysqli and return a resource for use with mysql_real_connect */ PHP_FUNCTION(mysqli_init) { - MYSQLI_RESOURCE *mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); - mysqli_resource->ptr = (void *)mysql_init(NULL); - MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_link_class_entry); + MYSQL *mysql; + mysql = mysql_init(NULL); + + ZEND_REGISTER_RESOURCE(return_value, mysql, le_mysqli_link) } /* }}} */ @@ -1128,12 +1029,11 @@ PHP_FUNCTION(mysqli_insert_id) MYSQL *mysql; my_ulonglong rc; zval *mysql_link; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); rc = mysql_insert_id(mysql); MYSQLI_RETURN_LONG_LONG(rc) } @@ -1146,12 +1046,11 @@ PHP_FUNCTION(mysqli_kill) MYSQL *mysql; zval *mysql_link; int processid; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_link, mysqli_link_class_entry, &processid) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &mysql_link, &processid) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); if (mysql_kill(mysql, processid)) { RETURN_FALSE; @@ -1168,12 +1067,11 @@ PHP_FUNCTION(mysqli_master_query) { zval *mysql_link; char *query = NULL; unsigned int query_len; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &mysql_link, &query, &query_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); if (mysql_master_query(mysql, query, query_len)) { RETURN_FALSE; @@ -1188,12 +1086,11 @@ PHP_FUNCTION(mysqli_num_fields) { MYSQL_RES *result; zval *mysql_result; - PR_RESULT *prresult; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_result) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result"); + ZEND_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, -1, "mysqli_result", le_mysqli_result); RETURN_LONG(mysql_num_fields(result)); @@ -1206,23 +1103,19 @@ PHP_FUNCTION(mysqli_num_rows) { MYSQL_RES *result; zval *mysql_result; - PR_RESULT *prresult; - PR_COMMAND *prcommand; ulong rc; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_result) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, prresult, PR_RESULT *, &mysql_result, "mysqli_result"); + ZEND_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, -1, "mysqli_result", le_mysqli_result); if (result->handle && result->handle->status == MYSQL_STATUS_USE_RESULT) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Function cannot be used with MYSQL_USE_RESULT"); RETURN_LONG(0); } - MYSQLI_PROFILER_COMMAND_START(prcommand, prresult); rc = mysql_num_rows(result); - MYSQLI_PROFILER_COMMAND_RETURNLONG(prcommand, rc); RETURN_LONG(rc); } /* }}} */ @@ -1237,12 +1130,11 @@ PHP_FUNCTION(mysqli_options) long mysql_option; unsigned int l_value; long ret; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oslz", &mysql_link, mysqli_link_class_entry, &mysql_option, &mysql_value) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rslz", &mysql_link, &mysql_option, &mysql_value) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); switch (Z_TYPE_PP(&mysql_value)) { case IS_STRING: @@ -1269,12 +1161,11 @@ PHP_FUNCTION(mysqli_param_count) { STMT *stmt; zval *mysql_stmt; - PR_STMT *prstmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_stmt) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt"); + MYSQLI_FETCH_STMT(stmt, STMT *, &mysql_stmt, -1, "mysqli_stmt", le_mysqli_stmt); RETURN_LONG(mysql_param_count(stmt->stmt)); } @@ -1286,12 +1177,11 @@ PHP_FUNCTION(mysqli_ping) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); RETURN_LONG(mysql_ping(mysql)); } /* }}} */ @@ -1302,52 +1192,26 @@ PHP_FUNCTION(mysqli_prepare) { MYSQL *mysql; STMT *stmt; - PR_MYSQL *prmysql; - PR_STMT *prstmt; char *query = NULL; unsigned int query_len; zval *mysql_link; - MYSQLI_RESOURCE *mysqli_resource; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os",&mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs",&mysql_link, &query, &query_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); stmt = (STMT *)ecalloc(1,sizeof(STMT)); stmt->var_cnt = 0; - /* profiling information */ - if (MyG(profiler)) { - prstmt = (PR_STMT *)MYSQLI_PROFILER_NEW(prmysql, MYSQLI_PR_STMT, 1); - prstmt->explain.query = my_estrdup(query); - if (!strncasecmp("select", query, 6)){ - if (!(MYSQLI_PROFILER_EXPLAIN(&prstmt->explain, &prstmt->header, mysql, query))) { - RETURN_FALSE; - } - } - } stmt->stmt = mysql_prepare(mysql, query, query_len); - if (MyG(profiler)) { - MYSQLI_PROFILER_ELAPSEDTIME(prstmt); - if (!stmt->stmt) { - prstmt->header.error = mysql_errno(mysql); - prstmt->header.errormsg = my_estrdup(mysql_error(mysql)); - } else { - prstmt->param_cnt = mysql_param_count(stmt->stmt); - prstmt->field_cnt = stmt->stmt->field_count; - } - } - if (!stmt->stmt) { efree(stmt); RETURN_FALSE; } - mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); - mysqli_resource->ptr = (void *)stmt; - MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_stmt_class_entry); + ZEND_REGISTER_RESOURCE(return_value, stmt, le_mysqli_stmt) } /* }}} */ @@ -1358,22 +1222,17 @@ PHP_FUNCTION(mysqli_prepare_result) STMT *stmt; MYSQL_RES *result; zval *mysql_stmt; - PR_STMT *prstmt = NULL; - MYSQLI_RESOURCE *mysqli_resource; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_stmt) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt"); + MYSQLI_FETCH_STMT(stmt, STMT *, &mysql_stmt, -1, "mysqli_stmt", le_mysqli_stmt); if (!(result = mysql_prepare_result(stmt->stmt))){ RETURN_FALSE; } - mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); - mysqli_resource->ptr = (void *)result; - mysqli_resource->prinfo = (void *)prstmt; - MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_result_class_entry); + ZEND_REGISTER_RESOURCE(return_value, result, le_mysqli_result) } /* }}} */ @@ -1383,12 +1242,11 @@ PHP_FUNCTION(mysqli_read_query_result) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); if (mysql_read_query_result(mysql)) { RETURN_FALSE; @@ -1407,9 +1265,8 @@ PHP_FUNCTION(mysqli_real_connect) unsigned int hostname_len, username_len, passwd_len, dbname_len, socket_len; unsigned int port=0, flags=0; zval *mysql_link; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|sssslsl", &mysql_link, mysqli_link_class_entry, + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|sssslsl", &mysql_link, &hostname, &hostname_len, &username, &username_len, &passwd, &passwd_len, &dbname, &dbname_len, &port, &socket, &socket_len, &flags) == FAILURE) { return; @@ -1433,7 +1290,7 @@ PHP_FUNCTION(mysqli_real_connect) } } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); if (mysql_real_connect(mysql,hostname,username,passwd,dbname,port,socket,flags) == NULL) { /* Save error messages */ @@ -1454,12 +1311,11 @@ PHP_FUNCTION(mysqli_real_query) zval *mysql_link; char *query = NULL; unsigned int query_len; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &mysql_link, &query, &query_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); if (mysql_real_query(mysql, query, query_len)) { RETURN_FALSE; @@ -1475,12 +1331,11 @@ PHP_FUNCTION(mysqli_real_escape_string) { zval *mysql_link = NULL; char *escapestr, *newstr; int escapestr_len, newstr_len; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &escapestr, &escapestr_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &mysql_link, &escapestr, &escapestr_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); newstr = emalloc(2 * escapestr_len + 1); newstr_len = mysql_real_escape_string(mysql, newstr, escapestr, escapestr_len); @@ -1496,12 +1351,11 @@ PHP_FUNCTION(mysqli_reload) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); RETURN_BOOL(!mysql_reload(mysql)); } @@ -1513,12 +1367,11 @@ PHP_FUNCTION(mysqli_rollback) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); RETURN_BOOL(mysql_rollback(mysql)); } @@ -1530,12 +1383,11 @@ PHP_FUNCTION(mysqli_rpl_parse_enabled) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); RETURN_LONG(mysql_rpl_parse_enabled(mysql)); } @@ -1547,12 +1399,11 @@ PHP_FUNCTION(mysqli_rpl_probe) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); if (mysql_rpl_probe(mysql)) { @@ -1570,12 +1421,11 @@ PHP_FUNCTION(mysqli_rpl_query_type) zval *mysql_link; char *query; int query_len; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &mysql_link, &query, &query_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); RETURN_LONG(mysql_rpl_query_type(query, query_len)); } @@ -1587,15 +1437,14 @@ PHP_FUNCTION(mysqli_send_long_data) { STMT *stmt; zval *mysql_stmt; - PR_STMT *prstmt; char *data; long param_nr, data_len; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ols", &mysql_stmt, mysqli_stmt_class_entry, ¶m_nr, &data, &data_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rls", &mysql_stmt, ¶m_nr, &data, &data_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt"); + MYSQLI_FETCH_STMT(stmt, STMT *, &mysql_stmt, -1, "mysqli_stmt", le_mysqli_stmt); if (!param_nr) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter number"); @@ -1618,12 +1467,11 @@ PHP_FUNCTION(mysqli_send_query) zval *mysql_link; char *query = NULL; unsigned int query_len; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &mysql_link, &query, &query_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); if (mysql_send_query(mysql, query, query_len)) { RETURN_FALSE; @@ -1640,12 +1488,11 @@ PHP_FUNCTION(mysqli_slave_query) zval *mysql_link; char *query = NULL; unsigned int query_len; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &mysql_link, &query, &query_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); if (mysql_slave_query(mysql, query, query_len)) { RETURN_FALSE; @@ -1661,12 +1508,11 @@ PHP_FUNCTION(mysqli_stmt_affected_rows) STMT *stmt; zval *mysql_stmt; my_ulonglong rc; - PR_STMT *prstmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_stmt) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt"); + MYSQLI_FETCH_STMT(stmt, STMT *, &mysql_stmt, -1, "mysqli_stmt", le_mysqli_stmt); rc = mysql_stmt_affected_rows(stmt->stmt); MYSQLI_RETURN_LONG_LONG(rc) @@ -1679,16 +1525,13 @@ PHP_FUNCTION(mysqli_stmt_close) { STMT *stmt; zval *mysql_stmt; - PR_STMT *prstmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_stmt) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt"); - mysql_stmt_close(stmt->stmt); - stmt->stmt = NULL; - php_clear_stmt_bind(stmt); - MYSQLI_CLEAR_RESOURCE(&mysql_stmt); + MYSQLI_FETCH_STMT(stmt, STMT *, &mysql_stmt, -1, "mysqli_stmt", le_mysqli_stmt); + + zend_list_delete(Z_RESVAL_PP(&mysql_stmt)); RETURN_TRUE; } @@ -1702,13 +1545,11 @@ PHP_FUNCTION(mysqli_select_db) zval *mysql_link; char *dbname; int dbname_len; - PR_MYSQL *prmysql; -// if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Os", &mysql_link, mysqli_link_class_entry, &dbname, &dbname_len) == FAILURE) { - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &dbname, &dbname_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &mysql_link, &dbname, &dbname_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); if (!mysql_select_db(mysql, dbname)) { RETURN_TRUE; @@ -1726,13 +1567,12 @@ PHP_FUNCTION(mysqli_ssl_set) zval *mysql_link; char *key=NULL, *cert=NULL, *ca=NULL, *capath=NULL, *cipher=NULL; int key_len, cert_len, ca_len, capath_len, cipher_len; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Osssss", &mysql_link, mysqli_link_class_entry, + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsssss", &mysql_link, &key, &key_len, &cert, &cert_len, &ca, &ca_len, &capath, &capath_len, &cipher, &cipher_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); mysql_ssl_set(mysql, key, cert, ca, capath, cipher); @@ -1746,12 +1586,11 @@ PHP_FUNCTION(mysqli_stat) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); RETURN_STRING((char *)mysql_stat(mysql), 1); } @@ -1764,12 +1603,11 @@ PHP_FUNCTION(mysqli_stmt_errno) { STMT *stmt; zval *mysql_stmt; - PR_STMT *prstmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_stmt) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt"); + MYSQLI_FETCH_STMT(stmt, STMT *, &mysql_stmt, -1, "mysqli_stmt", le_mysqli_stmt); RETURN_LONG(mysql_stmt_errno(stmt->stmt)); } @@ -1781,12 +1619,11 @@ PHP_FUNCTION(mysqli_stmt_error) { STMT *stmt; zval *mysql_stmt; - PR_STMT *prstmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_stmt) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt"); + MYSQLI_FETCH_STMT(stmt, STMT *, &mysql_stmt, -1, "mysqli_stmt", le_mysqli_stmt); RETURN_STRING((char *)mysql_stmt_error(stmt->stmt),1); } @@ -1798,12 +1635,11 @@ PHP_FUNCTION(mysqli_stmt_store_result) { STMT *stmt; zval *mysql_stmt; - PR_STMT *prstmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_stmt) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(stmt, STMT *, prstmt, PR_STMT *, &mysql_stmt, "mysqli_stmt"); + MYSQLI_FETCH_STMT(stmt, STMT *, &mysql_stmt, -1, "mysqli_stmt", le_mysqli_stmt); if (mysql_stmt_store_result(stmt->stmt)){ RETURN_FALSE; @@ -1819,20 +1655,16 @@ PHP_FUNCTION(mysqli_store_result) MYSQL *mysql; MYSQL_RES *result; zval *mysql_link; - PR_MYSQL *prmysql; - MYSQLI_RESOURCE *mysqli_resource; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); if (!(result = mysql_store_result(mysql))) { RETURN_FALSE; } - mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); - mysqli_resource->ptr = (void *)result; - MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_result_class_entry); + ZEND_REGISTER_RESOURCE(return_value, result, le_mysqli_result); } /* }}} */ @@ -1842,12 +1674,11 @@ PHP_FUNCTION(mysqli_thread_id) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); RETURN_LONG(mysql_thread_id(mysql)); } @@ -1869,20 +1700,16 @@ PHP_FUNCTION(mysqli_use_result) MYSQL *mysql; MYSQL_RES *result; zval *mysql_link; - PR_MYSQL *prmysql; - MYSQLI_RESOURCE *mysqli_resource; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); if (!(result = mysql_use_result(mysql))) { RETURN_FALSE; } - mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); - mysqli_resource->ptr = (void *)result; - MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_result_class_entry); + ZEND_REGISTER_RESOURCE(return_value, result, le_mysqli_result); } /* }}} */ @@ -1892,12 +1719,11 @@ PHP_FUNCTION(mysqli_warning_count) { MYSQL *mysql; zval *mysql_link; - PR_MYSQL *prmysql; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_link) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL *, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); RETURN_LONG(mysql_warning_count(mysql)); } diff --git a/ext/mysqli/mysqli_fe.c b/ext/mysqli/mysqli_fe.c index 82e4a681b2..6f73a5e05c 100644 --- a/ext/mysqli/mysqli_fe.c +++ b/ext/mysqli/mysqli_fe.c @@ -86,7 +86,6 @@ function_entry mysqli_functions[] = { PHP_FE(mysqli_ping, NULL) PHP_FE(mysqli_prepare, NULL) PHP_FE(mysqli_prepare_result, NULL) - PHP_FE(mysqli_profiler, NULL) PHP_FE(mysqli_query, NULL) PHP_FE(mysqli_read_query_result, NULL) PHP_FE(mysqli_real_connect, NULL) diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 6cfbac1639..14cf5e32eb 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -34,13 +34,9 @@ PHP_FUNCTION(mysqli_connect) { MYSQL *mysql; - MYSQLI_RESOURCE *mysqli_resource; - PR_MYSQL *prmysql = NULL; - zval *object = getThis(); char *hostname = NULL, *username=NULL, *passwd=NULL, *dbname=NULL, *socket=NULL; unsigned int hostname_len, username_len, passwd_len, dbname_len, socket_len; unsigned int port=0; - struct timeval starttime; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ssssls", &hostname, &hostname_len, &username, &username_len, &passwd, &passwd_len, &dbname, &dbname_len, &port, &socket, &socket_len) == FAILURE) { @@ -62,10 +58,6 @@ PHP_FUNCTION(mysqli_connect) } mysql = mysql_init(NULL); - if (MyG(profiler)){ - gettimeofday(&starttime, NULL); - } - if (mysql_real_connect(mysql,hostname,username,passwd,dbname,port,socket,0) == NULL) { /* Save error messages */ @@ -77,25 +69,7 @@ PHP_FUNCTION(mysqli_connect) RETURN_FALSE; } - if (MyG(profiler)) { - prmysql = (PR_MYSQL *)MYSQLI_PROFILER_NEW(prmain, MYSQLI_PR_MYSQL, 0); - php_mysqli_profiler_timediff(starttime, &prmysql->header.elapsedtime); - MYSQLI_PROFILER_STARTTIME(prmysql); - prmysql->hostname = estrdup(hostname); - prmysql->username = estrdup(username); - prmysql->thread_id = mysql->thread_id; - } - - mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); - mysqli_resource->ptr = (void *)mysql; - mysqli_resource->prinfo = prmysql; - - - if (!object) { - MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_link_class_entry); - } else { - ((mysqli_object *) zend_object_store_get_object(object TSRMLS_CC))->ptr = mysqli_resource; - } + ZEND_REGISTER_RESOURCE(return_value, mysql, le_mysqli_link); } /* }}} */ @@ -132,68 +106,31 @@ PHP_FUNCTION(mysqli_fetch_object) PHP_FUNCTION(mysqli_query) { MYSQL *mysql; zval *mysql_link; - MYSQLI_RESOURCE *mysqli_resource; MYSQL_RES *result; - PR_MYSQL *prmysql; - PR_QUERY *prquery; - PR_RESULT *prresult; char *query = NULL; unsigned int query_len; unsigned int resultmode = 0; - struct timeval starttime; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|l", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &mysql_link, &query, &query_len, &resultmode) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(mysql, MYSQL*, prmysql, PR_MYSQL *, &mysql_link, "mysqli_link"); - - /* profiling information */ - if (MyG(profiler)) { - prquery = (PR_QUERY *)MYSQLI_PROFILER_NEW(prmysql, MYSQLI_PR_QUERY, 1); - prquery->explain.query = my_estrdup(query); - if (!strncasecmp("select", query, 6)){ - if (!(MYSQLI_PROFILER_EXPLAIN(&prquery->explain, &prquery->header, mysql, query))) { - RETURN_FALSE; - } - } - } + ZEND_FETCH_RESOURCE(mysql, MYSQL *, &mysql_link, -1, "mysqli_link", le_mysqli_link); if (mysql_real_query(mysql, query, query_len)) { RETURN_FALSE; } - if (MyG(profiler)) { - MYSQLI_PROFILER_ELAPSEDTIME(prquery); - prquery->insertid = mysql_insert_id(mysql); - prquery->affectedrows = mysql_affected_rows(mysql); - } - if (!mysql_field_count(mysql)) { RETURN_FALSE; } - /* profiler result information */ - if (MyG(profiler)) { - gettimeofday(&starttime, NULL); - prresult = (PR_RESULT *)MYSQLI_PROFILER_NEW(prquery, MYSQLI_PR_RESULT, 1); - } - result = (resultmode == MYSQLI_USE_RESULT) ? mysql_use_result(mysql) : mysql_store_result(mysql); - if (result && MyG(profiler)) { - MYSQLI_PROFILER_ELAPSEDTIME(prresult); - prresult->rows = result->row_count; - prresult->columns = result->field_count; - } - if (!result) { RETURN_FALSE; } - mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); - mysqli_resource->ptr = (void *)result; - mysqli_resource->prinfo = (void *)prresult; - MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_result_class_entry); + ZEND_REGISTER_RESOURCE(return_value, result, le_mysqli_result); } /* }}} */ diff --git a/ext/mysqli/php_mysqli.h b/ext/mysqli/php_mysqli.h index c823e64527..71e6a734cb 100644 --- a/ext/mysqli/php_mysqli.h +++ b/ext/mysqli/php_mysqli.h @@ -26,7 +26,6 @@ #endif #include -#include "mysqli_profiler.h" #ifndef PHP_MYSQLI_H #define PHP_MYSQLI_H @@ -57,16 +56,6 @@ typedef struct _mysqli_object { void *ptr; } mysqli_object; /* extends zend_object */ -#define MYSQLI_PR_MAIN 0 -#define MYSQLI_PR_MYSQL 1 -#define MYSQLI_PR_QUERY 2 -#define MYSQLI_PR_QUERY_RESULT 3 -#define MYSQLI_PR_STMT 4 -#define MYSQLI_PR_STMT_RESULT 5 -#define MYSQLI_PR_RESULT 6 -#define MYSQLI_PR_COMMAND 7 - - #define phpext_mysqli_ptr &mysqli_module_entry #ifdef PHP_WIN32 @@ -89,65 +78,7 @@ extern function_entry mysqli_result_methods[]; extern void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int flag); extern void php_clear_stmt_bind(STMT *stmt); -zend_class_entry *mysqli_link_class_entry; -zend_class_entry *mysqli_stmt_class_entry; -zend_class_entry *mysqli_result_class_entry; - -zend_class_entry _mysqli_link_class_entry; -zend_class_entry _mysqli_stmt_class_entry; -zend_class_entry _mysqli_result_class_entry; - -PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRMLS_DC); - -#define REGISTER_MYSQLI_CLASS_ENTRY(name, mysqli_entry, class_functions) { \ - INIT_CLASS_ENTRY(_##mysqli_entry,name,class_functions); \ - _##mysqli_entry.create_object = mysqli_objects_new; \ - mysqli_entry = zend_register_internal_class(&_##mysqli_entry TSRMLS_CC); \ -} \ - -#define MYSQLI_REGISTER_RESOURCE_EX(__ptr, __zval, __ce) \ - ((mysqli_object *) zend_object_store_get_object(__zval TSRMLS_CC))->ptr = __ptr; - -#define MYSQLI_RETURN_RESOURCE(__ptr, __ce) \ - Z_TYPE_P(return_value) = IS_OBJECT; \ - (return_value)->value.obj = mysqli_objects_new(__ce TSRMLS_CC); \ - MYSQLI_REGISTER_RESOURCE_EX(__ptr, return_value, __ce) - -#define MYSQLI_REGISTER_RESOURCE(__ptr, __ce) \ -{\ - zval *object = getThis();\ - if (!object) {\ - object = return_value;\ - Z_TYPE_P(object) = IS_OBJECT;\ - (object)->value.obj = mysqli_objects_new(__ce TSRMLS_CC);\ - }\ - MYSQLI_REGISTER_RESOURCE_EX(__ptr, object, __ce)\ -} - -#define MYSQLI_FETCH_RESOURCE(__ptr, __type, __prptr, __prtype, __id, __name) \ -{ \ - MYSQLI_RESOURCE *my_res; \ - mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\ - if (!(my_res = (MYSQLI_RESOURCE *)intern->ptr)) {\ - php_error(E_WARNING, "Couldn't fetch %s", intern->zo.ce->name);\ - RETURN_NULL();\ - }\ - __ptr = (__type)my_res->ptr; \ - __prptr = (__prtype)my_res->prinfo; \ - if (!strcmp((char *)__name, "mysqli_stmt")) {\ - if (!((STMT *)__ptr)->stmt->mysql) {\ - php_error(E_WARNING, "Statement isn't valid anymore");\ - RETURN_NULL();\ - }\ - }\ -} - -#define MYSQLI_CLEAR_RESOURCE(__id) \ -{ \ - mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\ - efree(intern->ptr); \ - intern->ptr = NULL; \ -} +extern int le_mysqli_link, le_mysqli_result, le_mysqli_stmt; #define MYSQLI_RETURN_LONG_LONG(__val) \ { \ @@ -160,6 +91,15 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRML } \ } +#define MYSQLI_FETCH_STMT(rsrc, rsrc_type, passed_id, default_id, resource_type_name, resource_type) \ +{ \ + ZEND_FETCH_RESOURCE(rsrc, rsrc_type, passed_id, default_id, resource_type_name, resource_type); \ + if (!rsrc->stmt->mysql) { \ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Connection closed. Statement resource invalid.");\ + RETURN_FALSE;\ + } \ +} + #define MYSQLI_STORE_RESULT 0 #define MYSQLI_USE_RESULT 1 @@ -239,7 +179,6 @@ PHP_FUNCTION(mysqli_ping); PHP_FUNCTION(mysqli_prepare); PHP_FUNCTION(mysqli_query); PHP_FUNCTION(mysqli_prepare_result); -PHP_FUNCTION(mysqli_profiler); PHP_FUNCTION(mysqli_read_query_result); PHP_FUNCTION(mysqli_real_connect); PHP_FUNCTION(mysqli_real_query); @@ -278,7 +217,6 @@ ZEND_BEGIN_MODULE_GLOBALS(mysqli) char *default_socket; long error_no; char *error_msg; - unsigned int profiler; ZEND_END_MODULE_GLOBALS(mysqli) #ifdef ZTS diff --git a/ext/mysqli/tests/042.phpt b/ext/mysqli/tests/042.phpt index 58580c631a..4f14acd6fc 100644 --- a/ext/mysqli/tests/042.phpt +++ b/ext/mysqli/tests/042.phpt @@ -43,7 +43,7 @@ mysqli_fetch_object mysqli_close($link); ?> --EXPECTF-- -object(stdClass)#%d (7) { +object(stdClass)(7) { ["c1"]=> string(1) "0" ["c2"]=> diff --git a/ext/mysqli/tests/047.phpt b/ext/mysqli/tests/047.phpt index 0a11e0cf02..28cde5f080 100644 --- a/ext/mysqli/tests/047.phpt +++ b/ext/mysqli/tests/047.phpt @@ -29,7 +29,7 @@ mysqli_prepare_result --EXPECTF-- array(2) { [0]=> - object(stdClass)#%d (9) { + object(stdClass)(9) { ["name"]=> string(3) "foo" ["orgname"]=> @@ -50,7 +50,7 @@ array(2) { int(0) } [1]=> - object(stdClass)#%d (9) { + object(stdClass)(9) { ["name"]=> string(3) "bar" ["orgname"]=>