diff options
Diffstat (limited to 'ext/mysqli')
61 files changed, 1395 insertions, 1681 deletions
diff --git a/ext/mysqli/config.m4 b/ext/mysqli/config.m4 index f6c86e762b..c700dac819 100644 --- a/ext/mysqli/config.m4 +++ b/ext/mysqli/config.m4 @@ -2,6 +2,33 @@ dnl dnl $Id$ dnl config.m4 for extension mysqli +dnl ext/pdo_mysql/config.m4 also depends on this macro. +AC_DEFUN([PHP_MYSQL_SOCKET_SEARCH], [ + for i in \ + /var/run/mysqld/mysqld.sock \ + /var/tmp/mysql.sock \ + /var/run/mysql/mysql.sock \ + /var/lib/mysql/mysql.sock \ + /var/mysql/mysql.sock \ + /usr/local/mysql/var/mysql.sock \ + /Private/tmp/mysql.sock \ + /private/tmp/mysql.sock \ + /tmp/mysql.sock \ + ; do + if test -r $i; then + MYSQL_SOCK=$i + break 2 + fi + done + + if test -n "$MYSQL_SOCK"; then + AC_DEFINE_UNQUOTED(PHP_MYSQL_UNIX_SOCK_ADDR, "$MYSQL_SOCK", [ ]) + AC_MSG_RESULT([$MYSQL_SOCK]) + else + AC_MSG_RESULT([no]) + fi +]) + PHP_ARG_WITH(mysqli, for MySQLi support, [ --with-mysqli[=FILE] Include MySQLi support. FILE is the path to mysql_config. If no value or mysqlnd is passed @@ -12,6 +39,12 @@ PHP_ARG_ENABLE(embedded_mysqli, whether to enable embedded MySQLi support, MYSQLi: Enable embedded support Note: Does not work with MySQL native driver!], no, no) +dnl ext/pdo_mysql/config.m4 also depends on this configure option. +PHP_ARG_WITH(mysql-sock, for specified location of the MySQL UNIX socket, +[ --with-mysql-sock[=SOCKPATH] + MySQLi/PDO_MYSQL: Location of the MySQL unix socket pointer. + If unspecified, the default locations are searched], no, no) + if test "$PHP_MYSQLI" = "yes" || test "$PHP_MYSQLI" = "mysqlnd"; then dnl This needs to be set in any extension which wishes to use mysqlnd PHP_MYSQLND_ENABLED=yes @@ -72,10 +105,21 @@ fi dnl Build extension if test "$PHP_MYSQLI" != "no"; then + AC_MSG_CHECKING([for MySQL UNIX socket location]) + if test "$PHP_MYSQL_SOCK" != "no" && test "$PHP_MYSQL_SOCK" != "yes"; then + MYSQL_SOCK=$PHP_MYSQL_SOCK + AC_DEFINE_UNQUOTED(PHP_MYSQL_UNIX_SOCK_ADDR, "$MYSQL_SOCK", [ ]) + AC_MSG_RESULT([$MYSQL_SOCK]) + elif test "$PHP_MYSQL_SOCK" = "yes"; then + PHP_MYSQL_SOCKET_SEARCH + else + AC_MSG_RESULT([no]) + fi + mysqli_sources="mysqli.c mysqli_api.c mysqli_prop.c mysqli_nonapi.c \ mysqli_fe.c mysqli_report.c mysqli_driver.c mysqli_warning.c \ mysqli_exception.c mysqli_result_iterator.c $mysqli_extra_sources" - PHP_NEW_EXTENSION(mysqli, $mysqli_sources, $ext_shared) + PHP_NEW_EXTENSION(mysqli, $mysqli_sources, $ext_shared,, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1) PHP_SUBST(MYSQLI_SHARED_LIBADD) PHP_INSTALL_HEADERS([ext/mysqli/php_mysqli_structs.h]) diff --git a/ext/mysqli/config.w32 b/ext/mysqli/config.w32 index ab8bcd0087..9213931393 100644 --- a/ext/mysqli/config.w32 +++ b/ext/mysqli/config.w32 @@ -23,7 +23,7 @@ if (PHP_MYSQLI != "no") { "mysqli_warning.c"; if (PHP_MYSQLI == "yes" || PHP_MYSQLI == "mysqlnd") { - EXTENSION("mysqli", mysqli_source); + EXTENSION("mysqli", mysqli_source, PHP_MYSQLI_SHARED, "/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1"); AC_DEFINE('MYSQLI_USE_MYSQLND', 1, 'Using MySQL native driver'); AC_DEFINE('HAVE_MYSQLILIB', 1, 'Have MySQLi library'); ADD_EXTENSION_DEP('mysqli', 'mysqlnd', true); @@ -34,7 +34,7 @@ if (PHP_MYSQLI != "no") { CHECK_HEADER_ADD_INCLUDE("mysql.h", "CFLAGS_MYSQLI", PHP_MYSQLI + "\\include;" + PHP_PHP_BUILD + "\\include\\mysql;" + PHP_MYSQLI)) { - EXTENSION("mysqli", mysqli_source); + EXTENSION("mysqli", mysqli_source, PHP_MYSQLI_SHARED, "/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1"); AC_DEFINE('HAVE_MYSQLILIB', 1, 'Have MySQLi library'); MESSAGE("\tlibmysql build"); PHP_INSTALL_HEADERS("ext/mysqli", "php_mysqli_structs.h"); diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 91a7ee7682..d076614418 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2015 The PHP Group | +----------------------------------------------------------------------+ @@ -39,29 +39,23 @@ ZEND_DECLARE_MODULE_GLOBALS(mysqli) static PHP_GINIT_FUNCTION(mysqli); -#define MYSQLI_ADD_PROPERTIES(a,b) \ +#define MYSQLI_ADD_PROPERTIES(a, b) \ { \ int i = 0; \ while (b[i].pname != NULL) { \ mysqli_add_property((a), (b)[i].pname, (b)[i].pname_length, \ - (mysqli_read_t)(b)[i].r_func, (mysqli_write_t)(b)[i].w_func TSRMLS_CC); \ + (mysqli_read_t)(b)[i].r_func, (mysqli_write_t)(b)[i].w_func); \ i++; \ - }\ + } \ } -#define MYSQLI_ADD_PROPERTIES_INFO(a,b) \ -{ \ - int i = 0; \ - while (b[i].name != NULL) { \ - zend_declare_property_null((a), (b)[i].name, (b)[i].name_length, ZEND_ACC_PUBLIC TSRMLS_CC); \ - i++; \ - }\ -} - - - -static zend_object_handlers mysqli_object_handlers; static HashTable classes; +static zend_object_handlers mysqli_object_handlers; +static zend_object_handlers mysqli_object_driver_handlers; +static zend_object_handlers mysqli_object_link_handlers; +static zend_object_handlers mysqli_object_result_handlers; +static zend_object_handlers mysqli_object_stmt_handlers; +static zend_object_handlers mysqli_object_warning_handlers; static HashTable mysqli_driver_properties; static HashTable mysqli_link_properties; static HashTable mysqli_result_properties; @@ -76,32 +70,33 @@ zend_class_entry *mysqli_warning_class_entry; zend_class_entry *mysqli_exception_class_entry; -typedef int (*mysqli_read_t)(mysqli_object *obj, zval **retval TSRMLS_DC); -typedef int (*mysqli_write_t)(mysqli_object *obj, zval *newval TSRMLS_DC); +typedef zval *(*mysqli_read_t)(mysqli_object *obj, zval *rv); +typedef int (*mysqli_write_t)(mysqli_object *obj, zval *newval); typedef struct _mysqli_prop_handler { - char *name; - size_t name_len; + zend_string *name; mysqli_read_t read_func; mysqli_write_t write_func; } mysqli_prop_handler; static int le_pmysqli; +static void free_prop_handler(zval *el) { + pefree(Z_PTR_P(el), 1); +} /* Destructor for mysqli entries in free_links/used_links */ void php_mysqli_dtor_p_elements(void *data) { - MYSQL *mysql = (MYSQL *) data; - TSRMLS_FETCH(); + MYSQL *mysql = (MYSQL *)data; mysqli_close(mysql, MYSQLI_CLOSE_IMPLICIT); } ZEND_RSRC_DTOR_FUNC(php_mysqli_dtor) { - if (rsrc->ptr) { - mysqli_plist_entry *plist = (mysqli_plist_entry *) rsrc->ptr; + if (res->ptr) { + mysqli_plist_entry *plist = (mysqli_plist_entry *)res->ptr; zend_ptr_stack_clean(&plist->free_links, php_mysqli_dtor_p_elements, 0); zend_ptr_stack_destroy(&plist->free_links); free(plist); @@ -131,9 +126,7 @@ void php_free_stmt_bind_buffer(BIND_BUFFER bbuf, int type) efree(bbuf.buf[i].val); } - if (bbuf.vars[i]) { - zval_ptr_dtor(&bbuf.vars[i]); - } + zval_ptr_dtor(&bbuf.vars[i]); } if (bbuf.vars) { @@ -158,11 +151,11 @@ void php_free_stmt_bind_buffer(BIND_BUFFER bbuf, int type) #endif /* {{{ php_clear_stmt_bind */ -void php_clear_stmt_bind(MY_STMT *stmt TSRMLS_DC) +void php_clear_stmt_bind(MY_STMT *stmt) { if (stmt->stmt) { if (mysqli_stmt_close(stmt->stmt, TRUE)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error occurred while closing statement"); + php_error_docref(NULL, E_WARNING, "Error occurred while closing statement"); return; } } @@ -177,8 +170,8 @@ void php_clear_stmt_bind(MY_STMT *stmt TSRMLS_DC) /* Clean output bind */ php_free_stmt_bind_buffer(stmt->result, FETCH_RESULT); - if (stmt->link_handle) { - zend_objects_store_del_ref_by_handle(stmt->link_handle TSRMLS_CC); + if (!Z_ISUNDEF(stmt->link_handle)) { + zval_ptr_dtor(&stmt->link_handle); } #endif if (stmt->query) { @@ -191,27 +184,25 @@ void php_clear_stmt_bind(MY_STMT *stmt TSRMLS_DC) /* {{{ php_clear_mysql */ void php_clear_mysql(MY_MYSQL *mysql) { if (mysql->hash_key) { - efree(mysql->hash_key); + zend_string_release(mysql->hash_key); mysql->hash_key = NULL; } - if (mysql->li_read) { + if (!Z_ISUNDEF(mysql->li_read)) { zval_ptr_dtor(&(mysql->li_read)); - mysql->li_read = NULL; + ZVAL_UNDEF(&mysql->li_read); } } /* }}} */ /* {{{ mysqli_objects_free_storage */ -static void mysqli_objects_free_storage(void *object TSRMLS_DC) +static void mysqli_objects_free_storage(zend_object *object) { - zend_object *zo = (zend_object *)object; - mysqli_object *intern = (mysqli_object *)zo; + mysqli_object *intern = php_mysqli_fetch_object(object); MYSQLI_RESOURCE *my_res = (MYSQLI_RESOURCE *)intern->ptr; my_efree(my_res); - zend_object_std_dtor(&intern->zo TSRMLS_CC); - efree(intern); + zend_object_std_dtor(&intern->zo); } /* }}} */ @@ -219,177 +210,158 @@ static void mysqli_objects_free_storage(void *object TSRMLS_DC) /* {{{ mysqli_link_free_storage */ -static void mysqli_link_free_storage(void *object TSRMLS_DC) +static void mysqli_link_free_storage(zend_object *object) { - zend_object *zo = (zend_object *)object; - mysqli_object *intern = (mysqli_object *)zo; + mysqli_object *intern = php_mysqli_fetch_object(object); MYSQLI_RESOURCE *my_res = (MYSQLI_RESOURCE *)intern->ptr; if (my_res && my_res->ptr) { MY_MYSQL *mysql = (MY_MYSQL *)my_res->ptr; if (mysql->mysql) { - php_mysqli_close(mysql, MYSQLI_CLOSE_EXPLICIT, my_res->status TSRMLS_CC); + php_mysqli_close(mysql, MYSQLI_CLOSE_EXPLICIT, my_res->status); } php_clear_mysql(mysql); efree(mysql); my_res->status = MYSQLI_STATUS_UNKNOWN; } - mysqli_objects_free_storage(object TSRMLS_CC); + mysqli_objects_free_storage(object); } /* }}} */ /* {{{ mysql_driver_free_storage */ -static void mysqli_driver_free_storage(void *object TSRMLS_DC) +static void mysqli_driver_free_storage(zend_object *object) { - mysqli_objects_free_storage(object TSRMLS_CC); + mysqli_objects_free_storage(object); } /* }}} */ /* {{{ mysqli_stmt_free_storage */ -static void mysqli_stmt_free_storage(void *object TSRMLS_DC) +static void mysqli_stmt_free_storage(zend_object *object) { - zend_object *zo = (zend_object *)object; - mysqli_object *intern = (mysqli_object *)zo; + mysqli_object *intern = php_mysqli_fetch_object(object); MYSQLI_RESOURCE *my_res = (MYSQLI_RESOURCE *)intern->ptr; if (my_res && my_res->ptr) { MY_STMT *stmt = (MY_STMT *)my_res->ptr; - php_clear_stmt_bind(stmt TSRMLS_CC); + php_clear_stmt_bind(stmt); } - mysqli_objects_free_storage(object TSRMLS_CC); + mysqli_objects_free_storage(object); } /* }}} */ /* {{{ mysqli_result_free_storage */ -static void mysqli_result_free_storage(void *object TSRMLS_DC) +static void mysqli_result_free_storage(zend_object *object) { - zend_object *zo = (zend_object *)object; - mysqli_object *intern = (mysqli_object *)zo; + mysqli_object *intern = php_mysqli_fetch_object(object); MYSQLI_RESOURCE *my_res = (MYSQLI_RESOURCE *)intern->ptr; if (my_res && my_res->ptr) { mysql_free_result(my_res->ptr); } - mysqli_objects_free_storage(object TSRMLS_CC); + mysqli_objects_free_storage(object); } /* }}} */ /* {{{ mysqli_warning_free_storage */ -static void mysqli_warning_free_storage(void *object TSRMLS_DC) +static void mysqli_warning_free_storage(zend_object *object) { - zend_object *zo = (zend_object *)object; - mysqli_object *intern = (mysqli_object *)zo; + mysqli_object *intern = php_mysqli_fetch_object(object); MYSQLI_RESOURCE *my_res = (MYSQLI_RESOURCE *)intern->ptr; if (my_res && my_res->ptr) { php_clear_warnings((MYSQLI_WARNING *)my_res->info); my_res->ptr = NULL; } - mysqli_objects_free_storage(object TSRMLS_CC); + mysqli_objects_free_storage(object); } /* }}} */ /* {{{ mysqli_read_na */ -static int mysqli_read_na(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *mysqli_read_na(mysqli_object *obj, zval *retval) { - *retval = NULL; - php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot read property"); - return FAILURE; + php_error_docref(NULL, E_ERROR, "Cannot read property"); + return NULL; } /* }}} */ /* {{{ mysqli_write_na */ -static int mysqli_write_na(mysqli_object *obj, zval *newval TSRMLS_DC) +static int mysqli_write_na(mysqli_object *obj, zval *newval) { - php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot write property"); + php_error_docref(NULL, E_ERROR, "Cannot write property"); return FAILURE; } /* }}} */ -#ifndef Z_ADDREF_P -/* PHP 5.2, old GC */ -#define Z_ADDREF_P(pz) (++(pz)->refcount) -#define Z_REFCOUNT_P(pz) ((pz)->refcount) -#define Z_SET_REFCOUNT_P(pz, rc) ((pz)->refcount = rc) -#endif - - /* {{{ mysqli_read_property */ -zval *mysqli_read_property(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC) +zval *mysqli_read_property(zval *object, zval *member, int type, void **cache_slot, zval *rv) { zval tmp_member; zval *retval; mysqli_object *obj; - mysqli_prop_handler *hnd; - int ret; + mysqli_prop_handler *hnd = NULL; - ret = FAILURE; - obj = (mysqli_object *)zend_objects_get_address(object TSRMLS_CC); + obj = Z_MYSQLI_P(object); - if (member->type != IS_STRING) { - tmp_member = *member; - zval_copy_ctor(&tmp_member); + if (Z_TYPE_P(member) != IS_STRING) { + ZVAL_COPY(&tmp_member, member); convert_to_string(&tmp_member); member = &tmp_member; } if (obj->prop_handler != NULL) { - ret = zend_hash_find(obj->prop_handler, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &hnd); + hnd = zend_hash_find_ptr(obj->prop_handler, Z_STR_P(member)); } - if (ret == SUCCESS) { - ret = hnd->read_func(obj, &retval TSRMLS_CC); - if (ret == SUCCESS) { - /* ensure we're creating a temporary variable */ - Z_SET_REFCOUNT_P(retval, 0); - } else { - retval = EG(uninitialized_zval_ptr); + if (hnd) { + retval = hnd->read_func(obj, rv); + if (retval == NULL) { + retval = &EG(uninitialized_zval); } } else { - zend_object_handlers * std_hnd = zend_get_std_object_handlers(); - retval = std_hnd->read_property(object, member, type, key TSRMLS_CC); + zend_object_handlers *std_hnd = zend_get_std_object_handlers(); + retval = std_hnd->read_property(object, member, type, cache_slot, rv); } if (member == &tmp_member) { zval_dtor(member); } - return(retval); + + return retval; } /* }}} */ /* {{{ mysqli_write_property */ -void mysqli_write_property(zval *object, zval *member, zval *value, const zend_literal *key TSRMLS_DC) +void mysqli_write_property(zval *object, zval *member, zval *value, void **cache_slot) { zval tmp_member; mysqli_object *obj; - mysqli_prop_handler *hnd; - int ret; + mysqli_prop_handler *hnd = NULL; - if (member->type != IS_STRING) { - tmp_member = *member; - zval_copy_ctor(&tmp_member); + if (Z_TYPE_P(member) != IS_STRING) { + ZVAL_COPY(&tmp_member, member); convert_to_string(&tmp_member); member = &tmp_member; } - ret = FAILURE; - obj = (mysqli_object *)zend_objects_get_address(object TSRMLS_CC); + obj = Z_MYSQLI_P(object); if (obj->prop_handler != NULL) { - ret = zend_hash_find((HashTable *)obj->prop_handler, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &hnd); + hnd = zend_hash_find_ptr(obj->prop_handler, Z_STR_P(member)); } - if (ret == SUCCESS) { - hnd->write_func(obj, value TSRMLS_CC); + + if (hnd) { + hnd->write_func(obj, value); + /* ??? if (! PZVAL_IS_REF(value) && Z_REFCOUNT_P(value) == 0) { Z_ADDREF_P(value); zval_ptr_dtor(&value); - } + } */ } else { - zend_object_handlers * std_hnd = zend_get_std_object_handlers(); - std_hnd->write_property(object, member, value, key TSRMLS_CC); + zend_object_handlers *std_hnd = zend_get_std_object_handlers(); + std_hnd->write_property(object, member, value, cache_slot); } if (member == &tmp_member) { @@ -398,149 +370,133 @@ void mysqli_write_property(zval *object, zval *member, zval *value, const zend_l } /* }}} */ -/* {{{ void mysqli_add_property(HashTable *h, char *pname, mysqli_read_t r_func, mysqli_write_t w_func TSRMLS_DC) */ -void mysqli_add_property(HashTable *h, const char *pname, size_t pname_len, mysqli_read_t r_func, mysqli_write_t w_func TSRMLS_DC) { - mysqli_prop_handler p; +/* {{{ void mysqli_add_property(HashTable *h, char *pname, mysqli_read_t r_func, mysqli_write_t w_func) */ +void mysqli_add_property(HashTable *h, const char *pname, size_t pname_len, mysqli_read_t r_func, mysqli_write_t w_func) { + mysqli_prop_handler p; - p.name = (char*) pname; - p.name_len = pname_len; + p.name = zend_string_init(pname, pname_len, 1); p.read_func = (r_func) ? r_func : mysqli_read_na; p.write_func = (w_func) ? w_func : mysqli_write_na; - zend_hash_add(h, pname, pname_len + 1, &p, sizeof(mysqli_prop_handler), NULL); + zend_hash_add_mem(h, p.name, &p, sizeof(mysqli_prop_handler)); + zend_string_release(p.name); } /* }}} */ -static int mysqli_object_has_property(zval *object, zval *member, int has_set_exists, const zend_literal *key TSRMLS_DC) /* {{{ */ +static int mysqli_object_has_property(zval *object, zval *member, int has_set_exists, void **cache_slot) /* {{{ */ { - mysqli_object *obj = (mysqli_object *)zend_objects_get_address(object TSRMLS_CC); - mysqli_prop_handler p; + mysqli_object *obj = Z_MYSQLI_P(object); + mysqli_prop_handler *p; int ret = 0; - if (zend_hash_find(obj->prop_handler, Z_STRVAL_P(member), Z_STRLEN_P(member) + 1, (void **)&p) == SUCCESS) { + if ((p = zend_hash_find_ptr(obj->prop_handler, Z_STR_P(member))) != NULL) { switch (has_set_exists) { case 2: ret = 1; break; case 1: { - zval *value = mysqli_read_property(object, member, BP_VAR_IS, key TSRMLS_CC); - if (value != EG(uninitialized_zval_ptr)) { + zval rv; + zval *value = mysqli_read_property(object, member, BP_VAR_IS, cache_slot, &rv); + if (value != &EG(uninitialized_zval)) { convert_to_boolean(value); - ret = Z_BVAL_P(value)? 1:0; - /* refcount is 0 */ - Z_ADDREF_P(value); - zval_ptr_dtor(&value); + ret = Z_TYPE_P(value) == IS_TRUE ? 1 : 0; } break; } case 0:{ - zval *value = mysqli_read_property(object, member, BP_VAR_IS, key TSRMLS_CC); - if (value != EG(uninitialized_zval_ptr)) { - ret = Z_TYPE_P(value) != IS_NULL? 1:0; - /* refcount is 0 */ - Z_ADDREF_P(value); - zval_ptr_dtor(&value); + zval rv; + zval *value = mysqli_read_property(object, member, BP_VAR_IS, cache_slot, &rv); + if (value != &EG(uninitialized_zval)) { + ret = Z_TYPE_P(value) != IS_NULL? 1 : 0; + zval_ptr_dtor(value); } break; } default: - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid value for has_set_exists"); + php_error_docref(NULL, E_WARNING, "Invalid value for has_set_exists"); } } else { - zend_object_handlers * std_hnd = zend_get_std_object_handlers(); - ret = std_hnd->has_property(object, member, has_set_exists, key TSRMLS_CC); + zend_object_handlers *std_hnd = zend_get_std_object_handlers(); + ret = std_hnd->has_property(object, member, has_set_exists, cache_slot); } + return ret; } /* }}} */ - -#if PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION >= 3 -HashTable * mysqli_object_get_debug_info(zval *object, int *is_temp TSRMLS_DC) +HashTable *mysqli_object_get_debug_info(zval *object, int *is_temp) { - mysqli_object *obj = (mysqli_object *)zend_objects_get_address(object TSRMLS_CC); + mysqli_object *obj = Z_MYSQLI_P(object); HashTable *retval, *props = obj->prop_handler; - HashPosition pos; mysqli_prop_handler *entry; ALLOC_HASHTABLE(retval); ZEND_INIT_SYMTABLE_EX(retval, zend_hash_num_elements(props) + 1, 0); - zend_hash_internal_pointer_reset_ex(props, &pos); - while (zend_hash_get_current_data_ex(props, (void **)&entry, &pos) == SUCCESS) { - zval member; + ZEND_HASH_FOREACH_PTR(props, entry) { + zval rv, member; zval *value; - INIT_ZVAL(member); - ZVAL_STRINGL(&member, entry->name, entry->name_len, 0); - value = mysqli_read_property(object, &member, BP_VAR_IS, 0 TSRMLS_CC); - if (value != EG(uninitialized_zval_ptr)) { - Z_ADDREF_P(value); - zend_hash_add(retval, entry->name, entry->name_len + 1, &value, sizeof(zval *), NULL); + ZVAL_STR(&member, entry->name); + value = mysqli_read_property(object, &member, BP_VAR_IS, 0, &rv); + if (value != &EG(uninitialized_zval)) { + zend_hash_add(retval, Z_STR(member), value); } - zend_hash_move_forward_ex(props, &pos); - } + } ZEND_HASH_FOREACH_END(); *is_temp = 1; return retval; } -#endif /* {{{ mysqli_objects_new */ -PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry *class_type TSRMLS_DC) +PHP_MYSQLI_EXPORT(zend_object *) mysqli_objects_new(zend_class_entry *class_type) { - zend_object_value retval; mysqli_object *intern; zend_class_entry *mysqli_base_class; - zend_objects_free_object_storage_t free_storage; + zend_object_handlers *handlers; - intern = emalloc(sizeof(mysqli_object)); - memset(intern, 0, sizeof(mysqli_object)); - intern->ptr = NULL; - intern->prop_handler = NULL; + intern = ecalloc(1, sizeof(mysqli_object) + zend_object_properties_size(class_type)); mysqli_base_class = class_type; while (mysqli_base_class->type != ZEND_INTERNAL_CLASS && mysqli_base_class->parent != NULL) { mysqli_base_class = mysqli_base_class->parent; } - zend_hash_find(&classes, mysqli_base_class->name, mysqli_base_class->name_length + 1, - (void **) &intern->prop_handler); + intern->prop_handler = zend_hash_find_ptr(&classes, mysqli_base_class->name); - zend_object_std_init(&intern->zo, class_type TSRMLS_CC); + zend_object_std_init(&intern->zo, class_type); object_properties_init(&intern->zo, class_type); /* link object */ - if (instanceof_function(class_type, mysqli_link_class_entry TSRMLS_CC)) { - free_storage = mysqli_link_free_storage; - } else if (instanceof_function(class_type, mysqli_driver_class_entry TSRMLS_CC)) { /* driver object */ - free_storage = mysqli_driver_free_storage; - } else if (instanceof_function(class_type, mysqli_stmt_class_entry TSRMLS_CC)) { /* stmt object */ - free_storage = mysqli_stmt_free_storage; - } else if (instanceof_function(class_type, mysqli_result_class_entry TSRMLS_CC)) { /* result object */ - free_storage = mysqli_result_free_storage; - } else if (instanceof_function(class_type, mysqli_warning_class_entry TSRMLS_CC)) { /* warning object */ - free_storage = mysqli_warning_free_storage; + if (instanceof_function(class_type, mysqli_link_class_entry)) { + handlers = &mysqli_object_link_handlers; + } else if (instanceof_function(class_type, mysqli_driver_class_entry)) { /* driver object */ + handlers = &mysqli_object_driver_handlers; + } else if (instanceof_function(class_type, mysqli_stmt_class_entry)) { /* stmt object */ + handlers = &mysqli_object_stmt_handlers; + } else if (instanceof_function(class_type, mysqli_result_class_entry)) { /* result object */ + handlers = &mysqli_object_result_handlers; + } else if (instanceof_function(class_type, mysqli_warning_class_entry)) { /* warning object */ + handlers = &mysqli_object_warning_handlers; } else { - free_storage = mysqli_objects_free_storage; + handlers = &mysqli_object_handlers; } - retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t) zend_objects_destroy_object, free_storage, NULL TSRMLS_CC); - retval.handlers = &mysqli_object_handlers; + intern->zo.handlers = handlers; - return retval; + return &intern->zo; } /* }}} */ #ifdef MYSQLI_USE_MYSQLND #include "ext/mysqlnd/mysqlnd_reverse_api.h" -static MYSQLND *mysqli_convert_zv_to_mysqlnd(zval * zv TSRMLS_DC) +static MYSQLND *mysqli_convert_zv_to_mysqlnd(zval * zv) { - if (Z_TYPE_P(zv) == IS_OBJECT && instanceof_function(Z_OBJCE_P(zv), mysqli_link_class_entry TSRMLS_CC)) { - MY_MYSQL * mysql; - MYSQLI_RESOURCE * my_res; - mysqli_object * intern = (mysqli_object *)zend_object_store_get_object(zv TSRMLS_CC); + if (Z_TYPE_P(zv) == IS_OBJECT && instanceof_function(Z_OBJCE_P(zv), mysqli_link_class_entry)) { + MY_MYSQL *mysql; + MYSQLI_RESOURCE *my_res; + mysqli_object *intern = Z_MYSQLI_P(zv); if (!(my_res = (MYSQLI_RESOURCE *)intern->ptr)) { /* We know that we have a mysqli object, so this failure should be emitted */ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", intern->zo.ce->name); + php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", intern->zo.ce->name->val); return NULL; } mysql = (MY_MYSQL *)(my_res->ptr); @@ -576,11 +532,13 @@ PHP_INI_BEGIN() PHP_INI_END() /* }}} */ - /* {{{ PHP_GINIT_FUNCTION */ static PHP_GINIT_FUNCTION(mysqli) { +#if defined(COMPILE_DL_MYSQLI) && defined(ZTS) + ZEND_TSRMLS_CACHE_UPDATE(); +#endif mysqli_globals->num_links = 0; mysqli_globals->num_active_persistent = 0; mysqli_globals->num_inactive_persistent = 0; @@ -622,14 +580,26 @@ PHP_MINIT_FUNCTION(mysqli) #endif memcpy(&mysqli_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); + mysqli_object_handlers.offset = XtOffsetOf(mysqli_object, zo); + mysqli_object_handlers.free_obj = mysqli_objects_free_storage; mysqli_object_handlers.clone_obj = NULL; mysqli_object_handlers.read_property = mysqli_read_property; mysqli_object_handlers.write_property = mysqli_write_property; mysqli_object_handlers.get_property_ptr_ptr = std_hnd->get_property_ptr_ptr; mysqli_object_handlers.has_property = mysqli_object_has_property; -#if PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION >= 3 +#if PHP_VERSION_ID >= 50300 mysqli_object_handlers.get_debug_info = mysqli_object_get_debug_info; #endif + memcpy(&mysqli_object_driver_handlers, &mysqli_object_handlers, sizeof(zend_object_handlers)); + mysqli_object_driver_handlers.free_obj = mysqli_driver_free_storage; + memcpy(&mysqli_object_link_handlers, &mysqli_object_handlers, sizeof(zend_object_handlers)); + mysqli_object_link_handlers.free_obj = mysqli_link_free_storage; + memcpy(&mysqli_object_result_handlers, &mysqli_object_handlers, sizeof(zend_object_handlers)); + mysqli_object_result_handlers.free_obj = mysqli_result_free_storage; + memcpy(&mysqli_object_stmt_handlers, &mysqli_object_handlers, sizeof(zend_object_handlers)); + mysqli_object_stmt_handlers.free_obj = mysqli_stmt_free_storage; + memcpy(&mysqli_object_warning_handlers, &mysqli_object_handlers, sizeof(zend_object_handlers)); + mysqli_object_warning_handlers.free_obj = mysqli_warning_free_storage; zend_hash_init(&classes, 0, NULL, NULL, 1); @@ -639,53 +609,91 @@ PHP_MINIT_FUNCTION(mysqli) INIT_CLASS_ENTRY(cex, "mysqli_sql_exception", mysqli_exception_methods); #ifdef HAVE_SPL - mysqli_exception_class_entry = zend_register_internal_class_ex(&cex, spl_ce_RuntimeException, NULL TSRMLS_CC); + mysqli_exception_class_entry = zend_register_internal_class_ex(&cex, spl_ce_RuntimeException); #else - mysqli_exception_class_entry = zend_register_internal_class_ex(&cex, zend_exception_get_default(TSRMLS_C), NULL TSRMLS_CC); + mysqli_exception_class_entry = zend_register_internal_class_ex(&cex, zend_exception_get_default()); #endif mysqli_exception_class_entry->ce_flags |= ZEND_ACC_FINAL; - zend_declare_property_long(mysqli_exception_class_entry, "code", sizeof("code")-1, 0, ZEND_ACC_PROTECTED TSRMLS_CC); - zend_declare_property_string(mysqli_exception_class_entry, "sqlstate", sizeof("sqlstate")-1, "00000", ZEND_ACC_PROTECTED TSRMLS_CC); + zend_declare_property_long(mysqli_exception_class_entry, "code", sizeof("code")-1, 0, ZEND_ACC_PROTECTED); + zend_declare_property_string(mysqli_exception_class_entry, "sqlstate", sizeof("sqlstate")-1, "00000", ZEND_ACC_PROTECTED); REGISTER_MYSQLI_CLASS_ENTRY("mysqli_driver", mysqli_driver_class_entry, mysqli_driver_methods); ce = mysqli_driver_class_entry; - zend_hash_init(&mysqli_driver_properties, 0, NULL, NULL, 1); + zend_hash_init(&mysqli_driver_properties, 0, NULL, free_prop_handler, 1); MYSQLI_ADD_PROPERTIES(&mysqli_driver_properties, mysqli_driver_property_entries); - MYSQLI_ADD_PROPERTIES_INFO(ce, mysqli_driver_property_info_entries); - zend_hash_add(&classes, ce->name, ce->name_length+1, &mysqli_driver_properties, sizeof(mysqli_driver_properties), NULL); - ce->ce_flags |= ZEND_ACC_FINAL_CLASS; + zend_declare_property_null(ce, "client_info", sizeof("client_info") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "client_version", sizeof("client_version") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "driver_version", sizeof("driver_version") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "embedded", sizeof("embedded") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "reconnect", sizeof("reconnect") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "report_mode", sizeof("report_mode") - 1, ZEND_ACC_PUBLIC); + ce->ce_flags |= ZEND_ACC_FINAL; + zend_hash_add_ptr(&classes, ce->name, &mysqli_driver_properties); REGISTER_MYSQLI_CLASS_ENTRY("mysqli", mysqli_link_class_entry, mysqli_link_methods); ce = mysqli_link_class_entry; - zend_hash_init(&mysqli_link_properties, 0, NULL, NULL, 1); + zend_hash_init(&mysqli_link_properties, 0, NULL, free_prop_handler, 1); MYSQLI_ADD_PROPERTIES(&mysqli_link_properties, mysqli_link_property_entries); - MYSQLI_ADD_PROPERTIES_INFO(ce, mysqli_link_property_info_entries); - zend_hash_add(&classes, ce->name, ce->name_length+1, &mysqli_link_properties, sizeof(mysqli_link_properties), NULL); + zend_declare_property_null(ce, "affected_rows", sizeof("affected_rows") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "client_info", sizeof("client_info") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "client_version", sizeof("client_version") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "connect_errno", sizeof("connect_errno") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "connect_error", sizeof("connect_error") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "errno", sizeof("errno") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "error", sizeof("error") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "error_list", sizeof("error_list") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "field_count", sizeof("field_count") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "host_info", sizeof("host_info") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "info", sizeof("info") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "insert_id", sizeof("insert_id") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "server_info", sizeof("server_info") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "server_version", sizeof("server_version") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "stat", sizeof("stat") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "sqlstate", sizeof("sqlstate") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "protocol_version", sizeof("protocol_version") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "thread_id", sizeof("thread_id") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "warning_count", sizeof("warning_count") - 1, ZEND_ACC_PUBLIC); + zend_hash_add_ptr(&classes, ce->name, &mysqli_link_properties); REGISTER_MYSQLI_CLASS_ENTRY("mysqli_warning", mysqli_warning_class_entry, mysqli_warning_methods); ce = mysqli_warning_class_entry; - ce->ce_flags |= ZEND_ACC_FINAL_CLASS | ZEND_ACC_PROTECTED; - zend_hash_init(&mysqli_warning_properties, 0, NULL, NULL, 1); + ce->ce_flags |= ZEND_ACC_FINAL; + zend_hash_init(&mysqli_warning_properties, 0, NULL, free_prop_handler, 1); MYSQLI_ADD_PROPERTIES(&mysqli_warning_properties, mysqli_warning_property_entries); - MYSQLI_ADD_PROPERTIES_INFO(ce, mysqli_warning_property_info_entries); - zend_hash_add(&classes, ce->name, ce->name_length+1, &mysqli_warning_properties, sizeof(mysqli_warning_properties), NULL); + zend_declare_property_null(ce, "message", sizeof("message") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "sqlstate", sizeof("sqlstate") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "errno", sizeof("errno") - 1, ZEND_ACC_PUBLIC); + zend_hash_add_ptr(&classes, ce->name, &mysqli_warning_properties); REGISTER_MYSQLI_CLASS_ENTRY("mysqli_result", mysqli_result_class_entry, mysqli_result_methods); ce = mysqli_result_class_entry; - zend_hash_init(&mysqli_result_properties, 0, NULL, NULL, 1); + zend_hash_init(&mysqli_result_properties, 0, NULL, free_prop_handler, 1); MYSQLI_ADD_PROPERTIES(&mysqli_result_properties, mysqli_result_property_entries); - MYSQLI_ADD_PROPERTIES_INFO(ce, mysqli_result_property_info_entries); + zend_declare_property_null(ce, "current_field", sizeof("current_field") - 1,ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "field_count", sizeof("field_count") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "lengths", sizeof("lengths") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "num_rows", sizeof("num_rows") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "type", sizeof("type") - 1, ZEND_ACC_PUBLIC); mysqli_result_class_entry->get_iterator = php_mysqli_result_get_iterator; mysqli_result_class_entry->iterator_funcs.funcs = &php_mysqli_result_iterator_funcs; - zend_class_implements(mysqli_result_class_entry TSRMLS_CC, 1, zend_ce_traversable); - zend_hash_add(&classes, ce->name, ce->name_length+1, &mysqli_result_properties, sizeof(mysqli_result_properties), NULL); + zend_class_implements(mysqli_result_class_entry, 1, zend_ce_traversable); + zend_hash_add_ptr(&classes, ce->name, &mysqli_result_properties); REGISTER_MYSQLI_CLASS_ENTRY("mysqli_stmt", mysqli_stmt_class_entry, mysqli_stmt_methods); ce = mysqli_stmt_class_entry; - zend_hash_init(&mysqli_stmt_properties, 0, NULL, NULL, 1); + zend_hash_init(&mysqli_stmt_properties, 0, NULL, free_prop_handler, 1); MYSQLI_ADD_PROPERTIES(&mysqli_stmt_properties, mysqli_stmt_property_entries); - MYSQLI_ADD_PROPERTIES_INFO(ce, mysqli_stmt_property_info_entries); - zend_hash_add(&classes, ce->name, ce->name_length+1, &mysqli_stmt_properties, sizeof(mysqli_stmt_properties), NULL); + zend_declare_property_null(ce, "affected_rows", sizeof("affected_rows") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "insert_id", sizeof("insert_id") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "num_rows", sizeof("num_rows") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "param_count", sizeof("param_count") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "field_count", sizeof("field_count") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "errno", sizeof("errno") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "error", sizeof("error") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "error_list", sizeof("error_list") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "sqlstate", sizeof("sqlstate") - 1, ZEND_ACC_PUBLIC); + zend_declare_property_null(ce, "id", sizeof("id") - 1, ZEND_ACC_PUBLIC); + zend_hash_add_ptr(&classes, ce->name, &mysqli_stmt_properties); /* mysqli_options */ REGISTER_LONG_CONSTANT("MYSQLI_READ_DEFAULT_GROUP", MYSQL_READ_DEFAULT_GROUP, CONST_CS | CONST_PERSISTENT); @@ -864,7 +872,7 @@ PHP_MINIT_FUNCTION(mysqli) #ifdef MYSQLI_USE_MYSQLND - mysqlnd_reverse_api_register_api(&mysqli_reverse_api TSRMLS_CC); + mysqlnd_reverse_api_register_api(&mysqli_reverse_api); #endif return SUCCESS; @@ -878,7 +886,7 @@ PHP_MSHUTDOWN_FUNCTION(mysqli) #ifndef MYSQLI_USE_MYSQLND #if MYSQL_VERSION_ID >= 40000 #ifdef PHP_WIN32 - unsigned long client_ver = mysql_get_client_version(); + zend_ulong client_ver = mysql_get_client_version(); /* Can't call mysql_server_end() multiple times prior to 5.0.46 on Windows. PHP bug#41350 MySQL bug#25621 @@ -924,12 +932,11 @@ PHP_RINIT_FUNCTION(mysqli) #if defined(A0) && defined(MYSQLI_USE_MYSQLND) static void php_mysqli_persistent_helper_for_every(void *p) { - TSRMLS_FETCH(); mysqlnd_end_psession((MYSQLND *) p); } /* }}} */ -static int php_mysqli_persistent_helper_once(zend_rsrc_list_entry *le TSRMLS_DC) +static int php_mysqli_persistent_helper_once(zend_rsrc_list_entry *le) { if (le->type == php_le_pmysqli()) { mysqli_plist_entry *plist = (mysqli_plist_entry *) le->ptr; @@ -954,7 +961,7 @@ PHP_RSHUTDOWN_FUNCTION(mysqli) } #if defined(A0) && defined(MYSQLI_USE_MYSQLND) /* psession is being called when the connection is freed - explicitly or implicitly */ - zend_hash_apply(&EG(persistent_list), (apply_func_t) php_mysqli_persistent_helper_once TSRMLS_CC); + zend_hash_apply(&EG(persistent_list), (apply_func_t) php_mysqli_persistent_helper_once); #endif return SUCCESS; } @@ -970,11 +977,11 @@ PHP_MINFO_FUNCTION(mysqli) php_info_print_table_start(); php_info_print_table_header(2, "MysqlI Support", "enabled"); php_info_print_table_row(2, "Client API library version", mysql_get_client_info()); - snprintf(buf, sizeof(buf), "%ld", MyG(num_active_persistent)); + snprintf(buf, sizeof(buf), ZEND_LONG_FMT, MyG(num_active_persistent)); php_info_print_table_row(2, "Active Persistent Links", buf); - snprintf(buf, sizeof(buf), "%ld", MyG(num_inactive_persistent)); + snprintf(buf, sizeof(buf), ZEND_LONG_FMT, MyG(num_inactive_persistent)); php_info_print_table_row(2, "Inactive Persistent Links", buf); - snprintf(buf, sizeof(buf), "%ld", MyG(num_links)); + snprintf(buf, sizeof(buf), ZEND_LONG_FMT, MyG(num_links)); php_info_print_table_row(2, "Active Links", buf); #if !defined(MYSQLI_USE_MYSQLND) php_info_print_table_row(2, "Client API header version", MYSQL_SERVER_VERSION); @@ -989,7 +996,7 @@ PHP_MINFO_FUNCTION(mysqli) /* Dependancies */ static const zend_module_dep mysqli_deps[] = { -#if defined(HAVE_SPL) && ((PHP_MAJOR_VERSION > 5) || (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION >= 1)) +#if defined(HAVE_SPL) && (PHP_VERSION_ID >= 50100) ZEND_MOD_REQUIRED("spl") #endif #if defined(MYSQLI_USE_MYSQLND) @@ -1001,12 +1008,8 @@ static const zend_module_dep mysqli_deps[] = { /* {{{ mysqli_module_entry */ zend_module_entry mysqli_module_entry = { -#if ZEND_MODULE_API_NO >= 20050922 STANDARD_MODULE_HEADER_EX, NULL, mysqli_deps, -#elif ZEND_MODULE_API_NO >= 20010901 - STANDARD_MODULE_HEADER, -#endif "mysqli", mysqli_functions, PHP_MINIT(mysqli), @@ -1014,7 +1017,7 @@ zend_module_entry mysqli_module_entry = { PHP_RINIT(mysqli), PHP_RSHUTDOWN(mysqli), PHP_MINFO(mysqli), - "0.1", /* Replace with version number for your extension */ + PHP_MYSQLI_VERSION, PHP_MODULE_GLOBALS(mysqli), PHP_GINIT(mysqli), NULL, @@ -1024,6 +1027,9 @@ zend_module_entry mysqli_module_entry = { /* }}} */ #ifdef COMPILE_DL_MYSQLI +#ifdef ZTS +ZEND_TSRMLS_CACHE_DEFINE(); +#endif ZEND_GET_MODULE(mysqli) #endif @@ -1041,25 +1047,25 @@ PHP_FUNCTION(mysqli_stmt_construct) MY_STMT *stmt; MYSQLI_RESOURCE *mysqli_resource; char *statement; - int statement_len; + size_t statement_len; switch (ZEND_NUM_ARGS()) { case 1: /* mysql_stmt_init */ - if (zend_parse_parameters(1 TSRMLS_CC, "O", &mysql_link, mysqli_link_class_entry)==FAILURE) { + if (zend_parse_parameters(1, "O", &mysql_link, mysqli_link_class_entry)==FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT)); stmt->stmt = mysql_stmt_init(mysql->mysql); break; case 2: - if (zend_parse_parameters(2 TSRMLS_CC, "Os", &mysql_link, mysqli_link_class_entry, &statement, &statement_len)==FAILURE) { + if (zend_parse_parameters(2, "Os", &mysql_link, mysqli_link_class_entry, &statement, &statement_len)==FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT)); @@ -1077,15 +1083,14 @@ PHP_FUNCTION(mysqli_stmt_construct) RETURN_FALSE; } #ifndef MYSQLI_USE_MYSQLND - stmt->link_handle = Z_OBJ_HANDLE(*mysql_link); - zend_objects_store_add_ref_by_handle(stmt->link_handle TSRMLS_CC); + ZVAL_COPY(&stmt->link_handle, mysql_link); #endif mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->ptr = (void *)stmt; mysqli_resource->status = (ZEND_NUM_ARGS() == 1) ? MYSQLI_STATUS_INITIALIZED : MYSQLI_STATUS_VALID; - ((mysqli_object *) zend_object_store_get_object(getThis() TSRMLS_CC))->ptr = mysqli_resource; + MYSQLI_REGISTER_RESOURCE_EX(mysqli_resource, getThis()); } /* }}} */ @@ -1100,16 +1105,16 @@ PHP_FUNCTION(mysqli_result_construct) MYSQL_RES *result = NULL; zval *mysql_link; MYSQLI_RESOURCE *mysqli_resource; - long resmode = MYSQLI_STORE_RESULT; + zend_long resmode = MYSQLI_STORE_RESULT; switch (ZEND_NUM_ARGS()) { case 1: - if (zend_parse_parameters(1 TSRMLS_CC, "O", &mysql_link, mysqli_link_class_entry)==FAILURE) { + if (zend_parse_parameters(1, "O", &mysql_link, mysqli_link_class_entry)==FAILURE) { return; } break; case 2: - if (zend_parse_parameters(2 TSRMLS_CC, "Ol", &mysql_link, mysqli_link_class_entry, &resmode)==FAILURE) { + if (zend_parse_parameters(2, "Ol", &mysql_link, mysqli_link_class_entry, &resmode)==FAILURE) { return; } break; @@ -1117,7 +1122,7 @@ PHP_FUNCTION(mysqli_result_construct) WRONG_PARAM_COUNT; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); switch (resmode) { case MYSQLI_STORE_RESULT: @@ -1127,7 +1132,7 @@ PHP_FUNCTION(mysqli_result_construct) result = mysql_use_result(mysql->mysql); break; default: - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid value for resultmode"); + php_error_docref(NULL, E_WARNING, "Invalid value for resultmode"); } if (!result) { @@ -1138,22 +1143,20 @@ PHP_FUNCTION(mysqli_result_construct) mysqli_resource->ptr = (void *)result; mysqli_resource->status = MYSQLI_STATUS_VALID; - ((mysqli_object *) zend_object_store_get_object(getThis() TSRMLS_CC))->ptr = mysqli_resource; - + MYSQLI_REGISTER_RESOURCE_EX(mysqli_resource, getThis()); } /* }}} */ - /* {{{ php_mysqli_fetch_into_hash_aux */ -void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES * result, long fetchtype TSRMLS_DC) +void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES * result, zend_long fetchtype) { #if !defined(MYSQLI_USE_MYSQLND) MYSQL_ROW row; unsigned int i; MYSQL_FIELD *fields; - unsigned long *field_len; - + zend_ulong *field_len; + if (!(row = mysql_fetch_row(result))) { RETURN_NULL(); } @@ -1167,9 +1170,7 @@ void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES * result, long for (i = 0; i < mysql_num_fields(result); i++) { if (row[i]) { - zval *res; - - MAKE_STD_ZVAL(res); + zval res; #if MYSQL_VERSION_ID > 50002 if (mysql_fetch_field_direct(result, i)->type == MYSQL_TYPE_BIT) { @@ -1190,32 +1191,22 @@ void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES * result, long * use MYSQLI_LL_SPEC. */ snprintf(tmp, sizeof(tmp), (mysql_fetch_field_direct(result, i)->flags & UNSIGNED_FLAG)? MYSQLI_LLU_SPEC : MYSQLI_LL_SPEC, llval); - ZVAL_STRING(res, tmp, 1); + ZVAL_STRING(&res, tmp); } else #endif { -#if PHP_API_VERSION < 20100412 - /* check if we need magic quotes */ - if (PG(magic_quotes_runtime)) { - Z_TYPE_P(res) = IS_STRING; - Z_STRVAL_P(res) = php_addslashes(row[i], field_len[i], &Z_STRLEN_P(res), 0 TSRMLS_CC); - } else { -#endif - ZVAL_STRINGL(res, row[i], field_len[i], 1); -#if PHP_API_VERSION < 20100412 - } -#endif + ZVAL_STRINGL(&res, row[i], field_len[i]); } if (fetchtype & MYSQLI_NUM) { - add_index_zval(return_value, i, res); + add_index_zval(return_value, i, &res); } if (fetchtype & MYSQLI_ASSOC) { - if (fetchtype & MYSQLI_NUM) { - Z_ADDREF_P(res); + if (fetchtype & MYSQLI_NUM && Z_REFCOUNTED(res)) { + Z_ADDREF(res); } - add_assoc_zval(return_value, fields[i].name, res); + add_assoc_zval(return_value, fields[i].name, &res); } } else { if (fetchtype & MYSQLI_NUM) { @@ -1232,85 +1223,91 @@ void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES * result, long } /* }}} */ - /* {{{ php_mysqli_fetch_into_hash */ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags, int into_object) { MYSQL_RES *result; zval *mysql_result; - long fetchtype; + zend_long fetchtype; zval *ctor_params = NULL; zend_class_entry *ce = NULL; if (into_object) { - char *class_name; - int class_name_len; + zend_string *class_name = NULL; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|sz", &mysql_result, mysqli_result_class_entry, &class_name, &class_name_len, &ctor_params) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|Sz", &mysql_result, mysqli_result_class_entry, &class_name, &ctor_params) == FAILURE) { return; } - if (ZEND_NUM_ARGS() < (getThis() ? 1 : 2)) { + if (class_name == NULL) { ce = zend_standard_class_def; } else { - ce = zend_fetch_class(class_name, class_name_len, ZEND_FETCH_CLASS_AUTO TSRMLS_CC); + ce = zend_fetch_class(class_name, ZEND_FETCH_CLASS_AUTO); } if (!ce) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not find class '%s'", class_name); + php_error_docref(NULL, E_WARNING, "Could not find class '%s'", class_name->val); return; } fetchtype = MYSQLI_ASSOC; } else { if (override_flags) { - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { return; } fetchtype = override_flags; } else { fetchtype = MYSQLI_BOTH; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|l", &mysql_result, mysqli_result_class_entry, &fetchtype) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|l", &mysql_result, mysqli_result_class_entry, &fetchtype) == FAILURE) { return; } } } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); if (fetchtype < MYSQLI_ASSOC || fetchtype > MYSQLI_BOTH) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "The result type should be either MYSQLI_NUM, MYSQLI_ASSOC or MYSQLI_BOTH"); + php_error_docref(NULL, E_WARNING, "The result type should be either MYSQLI_NUM, MYSQLI_ASSOC or MYSQLI_BOTH"); RETURN_FALSE; } - php_mysqli_fetch_into_hash_aux(return_value, result, fetchtype TSRMLS_CC); + php_mysqli_fetch_into_hash_aux(return_value, result, fetchtype); if (into_object && Z_TYPE_P(return_value) == IS_ARRAY) { - zval dataset = *return_value; + zval dataset, retval; zend_fcall_info fci; zend_fcall_info_cache fcc; - zval *retval_ptr; + + ZVAL_COPY_VALUE(&dataset, return_value); object_and_properties_init(return_value, ce, NULL); - zend_merge_properties(return_value, Z_ARRVAL(dataset), 1 TSRMLS_CC); + if (!ce->default_properties_count && !ce->__set) { + ALLOC_HASHTABLE(Z_OBJ_P(return_value)->properties); + *Z_OBJ_P(return_value)->properties = *Z_ARRVAL(dataset); + efree(Z_ARR(dataset)); + } else { + zend_merge_properties(return_value, Z_ARRVAL(dataset)); + zval_ptr_dtor(&dataset); + } if (ce->constructor) { fci.size = sizeof(fci); fci.function_table = &ce->function_table; - fci.function_name = NULL; + ZVAL_UNDEF(&fci.function_name); fci.symbol_table = NULL; - fci.object_ptr = return_value; - fci.retval_ptr_ptr = &retval_ptr; + fci.object = Z_OBJ_P(return_value); + fci.retval = &retval; fci.params = NULL; fci.param_count = 0; fci.no_separation = 1; if (ctor_params && Z_TYPE_P(ctor_params) != IS_NULL) { - if (zend_fcall_info_args(&fci, ctor_params TSRMLS_CC) == FAILURE) { + if (zend_fcall_info_args(&fci, ctor_params) == FAILURE) { /* Two problems why we throw exceptions here: PHP is typeless * and hence passing one argument that's not an array could be * by mistake and the other way round is possible, too. The * single value is an array. Also we'd have to make that one * argument passed by reference. */ - zend_throw_exception(zend_exception_get_default(TSRMLS_C), "Parameter ctor_params must be an array", 0 TSRMLS_CC); + zend_throw_exception(zend_exception_get_default(), "Parameter ctor_params must be an array", 0); return; } } @@ -1319,20 +1316,18 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags fcc.function_handler = ce->constructor; fcc.calling_scope = EG(scope); fcc.called_scope = Z_OBJCE_P(return_value); - fcc.object_ptr = return_value; + fcc.object = Z_OBJ_P(return_value); - if (zend_call_function(&fci, &fcc TSRMLS_CC) == FAILURE) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_CC, "Could not execute %s::%s()", ce->name, ce->constructor->common.function_name); + if (zend_call_function(&fci, &fcc) == FAILURE) { + zend_throw_exception_ex(zend_exception_get_default(), 0, "Could not execute %s::%s()", ce->name->val, ce->constructor->common.function_name->val); } else { - if (retval_ptr) { - zval_ptr_dtor(&retval_ptr); - } + zval_ptr_dtor(&retval); } if (fci.params) { efree(fci.params); } } else if (ctor_params) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_CC, "Class %s does not have a constructor hence you cannot use ctor_params", ce->name); + zend_throw_exception_ex(zend_exception_get_default(), 0, "Class %s does not have a constructor hence you cannot use ctor_params", ce->name->val); } } } diff --git a/ext/mysqli/mysqli.dsp b/ext/mysqli/mysqli.dsp deleted file mode 100755 index a334202187..0000000000 --- a/ext/mysqli/mysqli.dsp +++ /dev/null @@ -1,120 +0,0 @@ -# Microsoft Developer Studio Project File - Name="mysqli" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=mysqli - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mysqli.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mysqli.mak" CFG="mysqli - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mysqli - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "mysqli - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mysqli - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQLI_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\include" /I "..\..\..\php_build\include\mysqli" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_MYSQLI" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D "PHP_MYSQLI_EXPORTS" /D "HAVE_ZLIB" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php5ts.lib zlib.lib libmySQL.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mysqli.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\release"
-
-!ELSEIF "$(CFG)" == "mysqli - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYSQLI_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\include" /I "..\..\..\php_build\include\mysqli" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_MYSQLI" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D "PHP_MYSQLI_EXPORTS" /D "HAVE_ZLIB" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php5ts_debug.lib zlib.lib libmySQL.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_mysqli.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\release"
-
-!ENDIF
-
-# Begin Target
-
-# Name "mysqli - Win32 Release_TS"
-# Name "mysqli - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\mysqli.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mysqli_api.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mysqli_fe.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mysqli_nonapi.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_mysqli.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 72c029ebc8..f52884f12c 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2015 The PHP Group | +----------------------------------------------------------------------+ @@ -30,7 +30,7 @@ #include "php_ini.h" #include "php_globals.h" #include "ext/standard/info.h" -#include "ext/standard/php_smart_str.h" +#include "zend_smart_str.h" #include "php_mysqli_structs.h" #include "mysqli_priv.h" #include "ext/mysqlnd/mysql_float_to_double.h" @@ -38,27 +38,27 @@ #if !defined(MYSQLI_USE_MYSQLND) /* {{{ mysqli_tx_cor_options_to_string */ -static void mysqli_tx_cor_options_to_string(const MYSQL * const conn, smart_str * str, const unsigned int mode) +static void mysqli_tx_cor_options_to_string(const MYSQL * const conn, smart_str * str, const uint32_t mode) { if (mode & TRANS_COR_AND_CHAIN && !(mode & TRANS_COR_AND_NO_CHAIN)) { - if (str->len) { + if (str->s && str->s->len) { smart_str_appendl(str, " ", sizeof(" ") - 1); } smart_str_appendl(str, "AND CHAIN", sizeof("AND CHAIN") - 1); } else if (mode & TRANS_COR_AND_NO_CHAIN && !(mode & TRANS_COR_AND_CHAIN)) { - if (str->len) { + if (str->s && str->s->len) { smart_str_appendl(str, " ", sizeof(" ") - 1); } smart_str_appendl(str, "AND NO CHAIN", sizeof("AND NO CHAIN") - 1); } if (mode & TRANS_COR_RELEASE && !(mode & TRANS_COR_NO_RELEASE)) { - if (str->len) { + if (str->s && str->s->len) { smart_str_appendl(str, " ", sizeof(" ") - 1); } smart_str_appendl(str, "RELEASE", sizeof("RELEASE") - 1); } else if (mode & TRANS_COR_NO_RELEASE && !(mode & TRANS_COR_RELEASE)) { - if (str->len) { + if (str->s && str->s->len) { smart_str_appendl(str, " ", sizeof(" ") - 1); } smart_str_appendl(str, "NO RELEASE", sizeof("NO RELEASE") - 1); @@ -67,10 +67,9 @@ static void mysqli_tx_cor_options_to_string(const MYSQL * const conn, smart_str } /* }}} */ - /* {{{ mysqlnd_escape_string_for_tx_name_in_comment */ char * -mysqli_escape_string_for_tx_name_in_comment(const char * const name TSRMLS_DC) +mysqli_escape_string_for_tx_name_in_comment(const char * const name) { char * ret = NULL; if (name) { @@ -96,7 +95,7 @@ mysqli_escape_string_for_tx_name_in_comment(const char * const name TSRMLS_DC) { *p_copy++ = v; } else if (warned == FALSE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Transaction name truncated. Must be only [0-9A-Za-z\\-_=]+"); + php_error_docref(NULL, E_WARNING, "Transaction name truncated. Must be only [0-9A-Za-z\\-_=]+"); warned = TRUE; } ++p_orig; @@ -109,22 +108,21 @@ mysqli_escape_string_for_tx_name_in_comment(const char * const name TSRMLS_DC) } /* }}} */ - /* {{{ mysqli_commit_or_rollback_libmysql */ -static int mysqli_commit_or_rollback_libmysql(MYSQL * conn, zend_bool commit, const unsigned int mode, const char * const name TSRMLS_DC) +static int mysqli_commit_or_rollback_libmysql(MYSQL * conn, zend_bool commit, const uint32_t mode, const char * const name) { int ret; - smart_str tmp_str = {0, 0, 0}; + smart_str tmp_str = {0}; mysqli_tx_cor_options_to_string(conn, &tmp_str, mode); smart_str_0(&tmp_str); { - char * query; - char * name_esc = mysqli_escape_string_for_tx_name_in_comment(name TSRMLS_CC); + char *query; + char *name_esc = mysqli_escape_string_for_tx_name_in_comment(name); size_t query_len; - query_len = spprintf(&query, 0, (commit? "COMMIT%s %s":"ROLLBACK%s %s"), - name_esc? name_esc:"", tmp_str.c? tmp_str.c:""); + query_len = spprintf(&query, 0, + (commit? "COMMIT%s %s":"ROLLBACK%s %s"), name_esc? name_esc:"", tmp_str.s? tmp_str.s->val:""); smart_str_free(&tmp_str); if (name_esc) { efree(name_esc); @@ -139,7 +137,6 @@ static int mysqli_commit_or_rollback_libmysql(MYSQL * conn, zend_bool commit, co /* }}} */ #endif - /* {{{ proto mixed mysqli_affected_rows(object link) Get number of affected rows in previous MySQL operation */ PHP_FUNCTION(mysqli_affected_rows) @@ -148,21 +145,20 @@ PHP_FUNCTION(mysqli_affected_rows) zval *mysql_link; my_ulonglong rc; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); rc = mysql_affected_rows(mysql->mysql); if (rc == (my_ulonglong) -1) { RETURN_LONG(-1); } - MYSQLI_RETURN_LONG_LONG(rc); + MYSQLI_RETURN_LONG_INT(rc); } /* }}} */ - /* {{{ proto bool mysqli_autocommit(object link, bool mode) Turn auto commit on or of */ PHP_FUNCTION(mysqli_autocommit) @@ -171,10 +167,10 @@ PHP_FUNCTION(mysqli_autocommit) zval *mysql_link; zend_bool automode; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ob", &mysql_link, mysqli_link_class_entry, &automode) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ob", &mysql_link, mysqli_link_class_entry, &automode) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); if (mysql_autocommit(mysql->mysql, (my_bool)automode)) { RETURN_FALSE; @@ -187,7 +183,7 @@ PHP_FUNCTION(mysqli_autocommit) #ifndef MYSQLI_USE_MYSQLND static int mysqli_stmt_bind_param_do_bind(MY_STMT *stmt, unsigned int argc, unsigned int num_vars, - zval ***args, unsigned int start, const char * const types TSRMLS_DC) + zval *args, unsigned int start, const char * const types) { int i, ofs; MYSQL_BIND *bind; @@ -203,22 +199,27 @@ int mysqli_stmt_bind_param_do_bind(MY_STMT *stmt, unsigned int argc, unsigned in ofs = 0; for (i = start; i < argc; i++) { - + zval *param; + if (Z_ISREF(args[i])) { + param = Z_REFVAL(args[i]); + } else { + param = &args[i]; + } /* set specified type */ switch (types[ofs]) { case 'd': /* Double */ bind[ofs].buffer_type = MYSQL_TYPE_DOUBLE; - bind[ofs].buffer = &Z_DVAL_PP(args[i]); + bind[ofs].buffer = &Z_DVAL_P(param); bind[ofs].is_null = &stmt->param.is_null[ofs]; break; case 'i': /* Integer */ -#if SIZEOF_LONG==8 +#if SIZEOF_ZEND_LONG==8 bind[ofs].buffer_type = MYSQL_TYPE_LONGLONG; -#elif SIZEOF_LONG==4 +#elif SIZEOF_ZEND_LONG==4 bind[ofs].buffer_type = MYSQL_TYPE_LONG; #endif - bind[ofs].buffer = &Z_LVAL_PP(args[i]); + bind[ofs].buffer = &Z_LVAL_P(param); bind[ofs].is_null = &stmt->param.is_null[ofs]; break; @@ -234,7 +235,7 @@ int mysqli_stmt_bind_param_do_bind(MY_STMT *stmt, unsigned int argc, unsigned in break; default: - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Undefined fieldtype %c (parameter %d)", types[ofs], i+1); + php_error_docref(NULL, E_WARNING, "Undefined fieldtype %c (parameter %d)", types[ofs], i+1); rc = 1; goto end_1; } @@ -247,13 +248,12 @@ end_1: efree(stmt->param.is_null); } else { stmt->param.var_cnt = num_vars; - stmt->param.vars = (zval **)safe_emalloc(num_vars, sizeof(zval), 0); + stmt->param.vars = safe_emalloc(num_vars, sizeof(zval), 0); for (i = 0; i < num_vars; i++) { - if (bind[i].buffer_type != MYSQL_TYPE_LONG_BLOB) { - Z_ADDREF_P(*args[i+start]); - stmt->param.vars[i] = *args[i+start]; + if (bind[i].buffer_type != MYSQL_TYPE_LONG_BLOB) { + ZVAL_COPY(&stmt->param.vars[i], &args[i+start]); } else { - stmt->param.vars[i] = NULL; + ZVAL_UNDEF(&stmt->param.vars[i]); } } } @@ -264,7 +264,7 @@ end_1: #else static int mysqli_stmt_bind_param_do_bind(MY_STMT *stmt, unsigned int argc, unsigned int num_vars, - zval ***args, unsigned int start, const char * const types TSRMLS_DC) + zval *args, unsigned int start, const char * const types) { unsigned int i; MYSQLND_PARAM_BIND *params; @@ -285,9 +285,9 @@ int mysqli_stmt_bind_param_do_bind(MY_STMT *stmt, unsigned int argc, unsigned in type = MYSQL_TYPE_DOUBLE; break; case 'i': /* Integer */ -#if SIZEOF_LONG==8 +#if SIZEOF_ZEND_LONG==8 type = MYSQL_TYPE_LONGLONG; -#elif SIZEOF_LONG==4 +#elif SIZEOF_ZEND_LONG==4 type = MYSQL_TYPE_LONG; #endif break; @@ -299,12 +299,12 @@ int mysqli_stmt_bind_param_do_bind(MY_STMT *stmt, unsigned int argc, unsigned in break; default: /* We count parameters from 1 */ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Undefined fieldtype %c (parameter %d)", types[i], i + start + 1); + php_error_docref(NULL, E_WARNING, "Undefined fieldtype %c (parameter %d)", types[i], i + start + 1); ret = FAIL; mysqlnd_stmt_free_param_bind(stmt->stmt, params); goto end; } - params[i].zv = *(args[i + start]); + ZVAL_COPY_VALUE(¶ms[i].zv, &args[i + start]); params[i].type = type; } ret = mysqlnd_stmt_bind_param(stmt->stmt, params); @@ -315,19 +315,19 @@ end: #endif /* }}} */ -/* {{{ proto bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....]) U +/* {{{ proto bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed ...]) Bind variables to a prepared statement as parameters */ PHP_FUNCTION(mysqli_stmt_bind_param) { - zval ***args; + zval *args; int argc = ZEND_NUM_ARGS(); int num_vars; int start = 2; MY_STMT *stmt; zval *mysql_stmt; char *types; - int types_len; - unsigned long rc; + size_t types_len; + zend_ulong rc; /* calculate and check number of parameters */ if (argc < 2) { @@ -335,12 +335,12 @@ PHP_FUNCTION(mysqli_stmt_bind_param) WRONG_PARAM_COUNT; } - if (zend_parse_method_parameters((getThis()) ? 1:2 TSRMLS_CC, getThis(), "Os", &mysql_stmt, mysqli_stmt_class_entry, + if (zend_parse_method_parameters((getThis()) ? 1:2, getThis(), "Os", &mysql_stmt, mysqli_stmt_class_entry, &types, &types_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); num_vars = argc - 1; if (getThis()) { @@ -350,28 +350,28 @@ PHP_FUNCTION(mysqli_stmt_bind_param) --num_vars; } if (!types_len) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid type or no types specified"); + php_error_docref(NULL, E_WARNING, "Invalid type or no types specified"); RETURN_FALSE; } if (types_len != argc - start) { /* number of bind variables doesn't match number of elements in type definition string */ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of elements in type definition string doesn't match number of bind variables"); + php_error_docref(NULL, E_WARNING, "Number of elements in type definition string doesn't match number of bind variables"); RETURN_FALSE; } if (types_len != mysql_stmt_param_count(stmt->stmt)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of variables doesn't match number of parameters in prepared statement"); + php_error_docref(NULL, E_WARNING, "Number of variables doesn't match number of parameters in prepared statement"); RETURN_FALSE; } - args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0); + args = safe_emalloc(argc, sizeof(zval), 0); if (zend_get_parameters_array_ex(argc, args) == FAILURE) { - zend_wrong_param_count(TSRMLS_C); + zend_wrong_param_count(); rc = 1; } else { - rc = mysqli_stmt_bind_param_do_bind(stmt, argc, num_vars, args, start, types TSRMLS_CC); + rc = mysqli_stmt_bind_param_do_bind(stmt, argc, num_vars, args, start, types); MYSQLI_REPORT_STMT_ERROR(stmt->stmt); } @@ -387,13 +387,13 @@ PHP_FUNCTION(mysqli_stmt_bind_param) do_alloca, free_alloca */ static int -mysqli_stmt_bind_result_do_bind(MY_STMT *stmt, zval ***args, unsigned int argc, unsigned int start TSRMLS_DC) +mysqli_stmt_bind_result_do_bind(MY_STMT *stmt, zval *args, unsigned int argc) { MYSQL_BIND *bind; int i, ofs; - int var_cnt = argc - start; - long col_type; - ulong rc; + int var_cnt = argc; + zend_long col_type; + zend_ulong rc; /* prevent leak if variables are already bound */ if (stmt->result.var_cnt) { @@ -403,19 +403,18 @@ mysqli_stmt_bind_result_do_bind(MY_STMT *stmt, zval ***args, unsigned int argc, bind = (MYSQL_BIND *)ecalloc(var_cnt, sizeof(MYSQL_BIND)); { int size; - char *p= emalloc(size= var_cnt * (sizeof(char) + sizeof(VAR_BUFFER))); + char *p = emalloc(size= var_cnt * (sizeof(char) + sizeof(VAR_BUFFER))); stmt->result.buf = (VAR_BUFFER *) p; stmt->result.is_null = p + var_cnt * sizeof(VAR_BUFFER); memset(p, 0, size); } - for (i=start; i < var_cnt + start ; i++) { - ofs = i - start; + for (i = 0; i < var_cnt; i++) { + ofs = i; col_type = (stmt->stmt->fields) ? stmt->stmt->fields[ofs].type : MYSQL_TYPE_STRING; switch (col_type) { case MYSQL_TYPE_FLOAT: - convert_to_double_ex(args[i]); stmt->result.buf[ofs].type = IS_DOUBLE; stmt->result.buf[ofs].buflen = sizeof(float); @@ -426,7 +425,6 @@ mysqli_stmt_bind_result_do_bind(MY_STMT *stmt, zval ***args, unsigned int argc, break; case MYSQL_TYPE_DOUBLE: - convert_to_double_ex(args[i]); stmt->result.buf[ofs].type = IS_DOUBLE; stmt->result.buf[ofs].buflen = sizeof(double); @@ -455,7 +453,6 @@ mysqli_stmt_bind_result_do_bind(MY_STMT *stmt, zval ***args, unsigned int argc, case MYSQL_TYPE_LONG: case MYSQL_TYPE_INT24: case MYSQL_TYPE_YEAR: - convert_to_long_ex(args[i]); stmt->result.buf[ofs].type = IS_LONG; /* don't set stmt->result.buf[ofs].buflen to 0, we used ecalloc */ stmt->result.buf[ofs].val = (char *)emalloc(sizeof(int)); @@ -501,7 +498,7 @@ mysqli_stmt_bind_result_do_bind(MY_STMT *stmt, zval ***args, unsigned int argc, /* Changed to my_bool in MySQL 5.1. See MySQL Bug #16144 */ my_bool tmp; #else - ulong tmp = 0; + zend_ulong tmp = 0; #endif stmt->result.buf[ofs].type = IS_STRING; /* @@ -538,7 +535,7 @@ mysqli_stmt_bind_result_do_bind(MY_STMT *stmt, zval ***args, unsigned int argc, break; } default: - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Server returned unknown type %ld. Probably your client library is incompatible with the server version you use!", col_type); + php_error_docref(NULL, E_WARNING, "Server returned unknown type %ld. Probably your client library is incompatible with the server version you use!", col_type); break; } } @@ -557,11 +554,9 @@ mysqli_stmt_bind_result_do_bind(MY_STMT *stmt, zval ***args, unsigned int argc, efree(stmt->result.buf); } else { stmt->result.var_cnt = var_cnt; - stmt->result.vars = (zval **)safe_emalloc((var_cnt), sizeof(zval), 0); - for (i = start; i < var_cnt+start; i++) { - ofs = i-start; - Z_ADDREF_PP(args[i]); - stmt->result.vars[ofs] = *args[i]; + stmt->result.vars = safe_emalloc((var_cnt), sizeof(zval), 0); + for (i = 0; i < var_cnt; i++) { + ZVAL_COPY(&stmt->result.vars[i], &args[i]); } } efree(bind); @@ -570,13 +565,13 @@ mysqli_stmt_bind_result_do_bind(MY_STMT *stmt, zval ***args, unsigned int argc, } #else static int -mysqli_stmt_bind_result_do_bind(MY_STMT *stmt, zval ***args, unsigned int argc, unsigned int start TSRMLS_DC) +mysqli_stmt_bind_result_do_bind(MY_STMT *stmt, zval *args, unsigned int argc) { unsigned int i; - MYSQLND_RESULT_BIND * params = mysqlnd_stmt_alloc_result_bind(stmt->stmt); + MYSQLND_RESULT_BIND *params = mysqlnd_stmt_alloc_result_bind(stmt->stmt); if (params) { - for (i = 0; i < (argc - start); i++) { - params[i].zv = *(args[i + start]); + for (i = 0; i < argc; i++) { + ZVAL_COPY_VALUE(¶ms[i].zv, &args[i]); } return mysqlnd_stmt_bind_result(stmt->stmt, params); } @@ -585,47 +580,28 @@ mysqli_stmt_bind_result_do_bind(MY_STMT *stmt, zval ***args, unsigned int argc, #endif /* }}} */ -/* {{{ proto bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...]) U +/* {{{ proto bool mysqli_stmt_bind_result(object stmt, mixed var [,mixed ...]) Bind variables to a prepared statement for result storage */ PHP_FUNCTION(mysqli_stmt_bind_result) { - zval ***args; - int argc = ZEND_NUM_ARGS(); - int start = 1; - ulong rc; + zval *args; + int argc; + zend_ulong rc; MY_STMT *stmt; zval *mysql_stmt; - if (getThis()) { - start = 0; - } - - if (zend_parse_method_parameters((getThis()) ? 0:1 TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O+", &mysql_stmt, mysqli_stmt_class_entry, &args, &argc) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); - - if (argc < (getThis() ? 1 : 2)) { - WRONG_PARAM_COUNT; - } + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); - if ((argc - start) != mysql_stmt_field_count(stmt->stmt)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of bind variables doesn't match number of fields in prepared statement"); + if (argc != mysql_stmt_field_count(stmt->stmt)) { + php_error_docref(NULL, E_WARNING, "Number of bind variables doesn't match number of fields in prepared statement"); RETURN_FALSE; } - args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0); - - if (zend_get_parameters_array_ex(argc, args) == FAILURE) { - efree(args); - WRONG_PARAM_COUNT; - } - - rc = mysqli_stmt_bind_result_do_bind(stmt, args, argc, start TSRMLS_CC); - - efree(args); - + rc = mysqli_stmt_bind_result_do_bind(stmt, args, argc); RETURN_BOOL(!rc); } /* }}} */ @@ -637,16 +613,16 @@ PHP_FUNCTION(mysqli_change_user) MY_MYSQL *mysql; zval *mysql_link = NULL; char *user, *password, *dbname; - int user_len, password_len, dbname_len; - ulong rc; + size_t user_len, password_len, dbname_len; + zend_ulong rc; #if !defined(MYSQLI_USE_MYSQLND) && defined(HAVE_MYSQLI_SET_CHARSET) const CHARSET_INFO * old_charset; #endif - 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_method_parameters(ZEND_NUM_ARGS(), getThis(), "Osss", &mysql_link, mysqli_link_class_entry, &user, &user_len, &password, &password_len, &dbname, &dbname_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); #if !defined(MYSQLI_USE_MYSQLND) && defined(HAVE_MYSQLI_SET_CHARSET) old_charset = mysql->mysql->charset; @@ -685,21 +661,20 @@ PHP_FUNCTION(mysqli_character_set_name) zval *mysql_link; const char *cs_name; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); cs_name = mysql_character_set_name(mysql->mysql); if (cs_name) { - RETURN_STRING(cs_name, 1); + RETURN_STRING(cs_name); } } /* }}} */ - /* {{{ php_mysqli_close */ -void php_mysqli_close(MY_MYSQL * mysql, int close_type, int resource_status TSRMLS_DC) +void php_mysqli_close(MY_MYSQL * mysql, int close_type, int resource_status) { if (resource_status > MYSQLI_STATUS_INITIALIZED) { MyG(num_links)--; @@ -708,9 +683,9 @@ void php_mysqli_close(MY_MYSQL * mysql, int close_type, int resource_status TSRM if (!mysql->persistent) { 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) { - if (Z_TYPE_P(le) == php_le_pmysqli()) { + zend_resource *le; + if ((le = zend_hash_find_ptr(&EG(persistent_list), mysql->hash_key)) != NULL) { + if (le->type == php_le_pmysqli()) { mysqli_plist_entry *plist = (mysqli_plist_entry *) le->ptr; #if defined(MYSQLI_USE_MYSQLND) mysqlnd_end_psession(mysql->mysql); @@ -718,12 +693,12 @@ void php_mysqli_close(MY_MYSQL * mysql, int close_type, int resource_status TSRM if (MyG(rollback_on_cached_plink) && #if !defined(MYSQLI_USE_MYSQLND) - mysqli_commit_or_rollback_libmysql(mysql->mysql, FALSE, TRANS_COR_NO_OPT, NULL TSRMLS_CC)) + mysqli_commit_or_rollback_libmysql(mysql->mysql, FALSE, TRANS_COR_NO_OPT, NULL)) #else FAIL == mysqlnd_rollback(mysql->mysql, TRANS_COR_NO_OPT, NULL)) #endif { - mysqli_close(mysql->mysql, close_type); + mysqli_close(mysql->mysql, close_type); } else { zend_ptr_stack_push(&plist->free_links, mysql->mysql); MyG(num_inactive_persistent)++; @@ -739,7 +714,6 @@ void php_mysqli_close(MY_MYSQL * mysql, int close_type, int resource_status TSRM } /* }}} */ - /* {{{ proto bool mysqli_close(object link) Close connection */ PHP_FUNCTION(mysqli_close) @@ -747,39 +721,38 @@ 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) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_INITIALIZED); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_INITIALIZED); - php_mysqli_close(mysql, MYSQLI_CLOSE_EXPLICIT, ((MYSQLI_RESOURCE *)((mysqli_object *)zend_object_store_get_object(mysql_link TSRMLS_CC))->ptr)->status TSRMLS_CC); - ((MYSQLI_RESOURCE *)((mysqli_object *)zend_object_store_get_object(mysql_link TSRMLS_CC))->ptr)->status = MYSQLI_STATUS_UNKNOWN; + php_mysqli_close(mysql, MYSQLI_CLOSE_EXPLICIT, ((MYSQLI_RESOURCE *)(Z_MYSQLI_P(mysql_link))->ptr)->status); + ((MYSQLI_RESOURCE *)(Z_MYSQLI_P(mysql_link))->ptr)->status = MYSQLI_STATUS_UNKNOWN; - MYSQLI_CLEAR_RESOURCE(&mysql_link); + MYSQLI_CLEAR_RESOURCE(mysql_link); efree(mysql); RETURN_TRUE; } /* }}} */ - /* {{{ proto bool mysqli_commit(object link[, int flags [, string name ]]) Commit outstanding actions and close transaction */ PHP_FUNCTION(mysqli_commit) { MY_MYSQL *mysql; zval *mysql_link; - long flags = TRANS_COR_NO_OPT; + zend_long flags = TRANS_COR_NO_OPT; char * name = NULL; - int name_len = 0; + size_t name_len = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|ls", &mysql_link, mysqli_link_class_entry, &flags, &name, &name_len) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|ls", &mysql_link, mysqli_link_class_entry, &flags, &name, &name_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); #if !defined(MYSQLI_USE_MYSQLND) - if (mysqli_commit_or_rollback_libmysql(mysql->mysql, TRUE, flags, name TSRMLS_CC)) { + if (mysqli_commit_or_rollback_libmysql(mysql->mysql, TRUE, flags, name)) { #else if (FAIL == mysqlnd_commit(mysql->mysql, flags, name)) { #endif @@ -795,20 +768,20 @@ PHP_FUNCTION(mysqli_data_seek) { MYSQL_RES *result; zval *mysql_result; - long offset; + zend_long offset; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_result, mysqli_result_class_entry, &offset) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ol", &mysql_result, mysqli_result_class_entry, &offset) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); if (mysqli_result_is_unbuffered(result)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Function cannot be used with MYSQL_USE_RESULT"); + php_error_docref(NULL, E_WARNING, "Function cannot be used with MYSQL_USE_RESULT"); RETURN_FALSE; } - if (offset < 0 || offset >= mysql_num_rows(result)) { + if (offset < 0 || (uint64_t)offset >= mysql_num_rows(result)) { RETURN_FALSE; } @@ -817,14 +790,14 @@ PHP_FUNCTION(mysqli_data_seek) } /* }}} */ -/* {{{ proto void mysqli_debug(string debug) U +/* {{{ proto void mysqli_debug(string debug) */ PHP_FUNCTION(mysqli_debug) { char *debug; - int debug_len; + size_t debug_len; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &debug, &debug_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &debug, &debug_len) == FAILURE) { return; } @@ -833,7 +806,6 @@ PHP_FUNCTION(mysqli_debug) } /* }}} */ - /* {{{ proto bool mysqli_dump_debug_info(object link) */ PHP_FUNCTION(mysqli_dump_debug_info) @@ -841,10 +813,10 @@ PHP_FUNCTION(mysqli_dump_debug_info) MY_MYSQL *mysql; zval *mysql_link; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); RETURN_BOOL(!mysql_dump_debug_info(mysql->mysql)) } @@ -857,10 +829,10 @@ PHP_FUNCTION(mysqli_errno) MY_MYSQL *mysql; zval *mysql_link; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); RETURN_LONG(mysql_errno(mysql->mysql)); } /* }}} */ @@ -873,33 +845,17 @@ PHP_FUNCTION(mysqli_error) zval *mysql_link; const char *err; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); err = mysql_error(mysql->mysql); if (err) { - RETURN_STRING(err, 1); + RETURN_STRING(err); } } /* }}} */ -#ifndef MYSQLI_USE_MYSQLND -/* {{{ php_mysqli_stmt_copy_it */ -static void -php_mysqli_stmt_copy_it(zval *** copies, zval *original, uint param_count, uint current) -{ - if (!*copies) { - *copies = ecalloc(param_count, sizeof(zval *)); - } - MAKE_STD_ZVAL((*copies)[current]); - *(*copies)[current] = *original; - Z_SET_REFCOUNT_P((*copies)[current], 1); - zval_copy_ctor((*copies)[current]); -} -/* }}} */ -#endif - /* {{{ proto bool mysqli_stmt_execute(object stmt) Execute a prepared statement */ PHP_FUNCTION(mysqli_stmt_execute) @@ -908,57 +864,53 @@ PHP_FUNCTION(mysqli_stmt_execute) zval *mysql_stmt; #ifndef MYSQLI_USE_MYSQLND unsigned int i; - zval **copies = NULL; #endif - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); #ifndef MYSQLI_USE_MYSQLND if (stmt->param.var_cnt) { int j; for (i = 0; i < stmt->param.var_cnt; i++) { + if (!Z_ISREF(stmt->param.vars[i])) { + continue; + } for (j = i + 1; j < stmt->param.var_cnt; j++) { /* Oops, someone binding the same variable - clone */ - if (stmt->param.vars[j] == stmt->param.vars[i] && stmt->param.vars[i]) { - php_mysqli_stmt_copy_it(&copies, stmt->param.vars[i], stmt->param.var_cnt, i); + if (Z_TYPE(stmt->param.vars[j]) == Z_TYPE(stmt->param.vars[i]) && + Z_REFVAL(stmt->param.vars[j]) == Z_REFVAL(stmt->param.vars[i])) { + SEPARATE_ZVAL(&stmt->param.vars[j]); break; } } } } for (i = 0; i < stmt->param.var_cnt; i++) { - if (stmt->param.vars[i]) { - if ( !(stmt->param.is_null[i] = (stmt->param.vars[i]->type == IS_NULL)) ) { - zval *the_var = copies && copies[i]? copies[i]:stmt->param.vars[i]; + if (!Z_ISUNDEF(stmt->param.vars[i])) { + zval *param; + if (Z_ISREF(stmt->param.vars[i])) { + param = Z_REFVAL(stmt->param.vars[i]); + } else { + param = &stmt->param.vars[i]; + } + if (!(stmt->param.is_null[i] = (Z_ISNULL_P(param)))) { switch (stmt->stmt->params[i].buffer_type) { case MYSQL_TYPE_VAR_STRING: - if (the_var == stmt->param.vars[i] && Z_TYPE_P(stmt->param.vars[i]) != IS_STRING) { - php_mysqli_stmt_copy_it(&copies, stmt->param.vars[i], stmt->param.var_cnt, i); - the_var = copies[i]; - } - convert_to_string_ex(&the_var); - stmt->stmt->params[i].buffer = Z_STRVAL_P(the_var); - stmt->stmt->params[i].buffer_length = Z_STRLEN_P(the_var); + convert_to_string_ex(param); + stmt->stmt->params[i].buffer = Z_STRVAL_P(param); + stmt->stmt->params[i].buffer_length = Z_STRLEN_P(param); break; case MYSQL_TYPE_DOUBLE: - if (the_var == stmt->param.vars[i] && Z_TYPE_P(stmt->param.vars[i]) != IS_DOUBLE) { - php_mysqli_stmt_copy_it(&copies, stmt->param.vars[i], stmt->param.var_cnt, i); - the_var = copies[i]; - } - convert_to_double_ex(&the_var); - stmt->stmt->params[i].buffer = &Z_DVAL_P(the_var); + convert_to_double_ex(param); + stmt->stmt->params[i].buffer = &Z_DVAL_P(param); break; case MYSQL_TYPE_LONGLONG: case MYSQL_TYPE_LONG: - if (the_var == stmt->param.vars[i] && Z_TYPE_P(stmt->param.vars[i]) != IS_LONG) { - php_mysqli_stmt_copy_it(&copies, stmt->param.vars[i], stmt->param.var_cnt, i); - the_var = copies[i]; - } - convert_to_long_ex(&the_var); - stmt->stmt->params[i].buffer = &Z_LVAL_P(the_var); + convert_to_long_ex(param); + stmt->stmt->params[i].buffer = &Z_LVAL_P(param); break; default: break; @@ -975,19 +927,8 @@ PHP_FUNCTION(mysqli_stmt_execute) RETVAL_TRUE; } -#ifndef MYSQLI_USE_MYSQLND - if (copies) { - for (i = 0; i < stmt->param.var_cnt; i++) { - if (copies[i]) { - zval_ptr_dtor(&copies[i]); - } - } - efree(copies); - } -#endif - if (MyG(report_mode) & MYSQLI_REPORT_INDEX) { - php_mysqli_report_index(stmt->query, mysqli_stmt_server_status(stmt->stmt) TSRMLS_CC); + php_mysqli_report_index(stmt->query, mysqli_stmt_server_status(stmt->stmt)); } } /* }}} */ @@ -1000,15 +941,15 @@ void mysqli_stmt_fetch_libmysql(INTERNAL_FUNCTION_PARAMETERS) MY_STMT *stmt; zval *mysql_stmt; unsigned int i; - ulong ret; + zend_ulong ret; unsigned int uval; my_ulonglong llval; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); /* reset buffers */ for (i = 0; i < stmt->result.var_cnt; i++) { @@ -1023,15 +964,20 @@ void mysqli_stmt_fetch_libmysql(INTERNAL_FUNCTION_PARAMETERS) if (!ret) { #endif for (i = 0; i < stmt->result.var_cnt; i++) { + zval *result; + /* it must be a reference, isn't it? */ + if (Z_ISREF(stmt->result.vars[i])) { + result = Z_REFVAL(stmt->result.vars[i]); + } else { + result = &stmt->result.vars[i]; + } /* QQ: Isn't it quite better to call zval_dtor(). What if the user has assigned a resource, or an array to the bound variable? We are going to leak probably. zval_dtor() will handle also Unicode/Non-unicode mode. */ /* Even if the string is of length zero there is one byte alloced so efree() in all cases */ - if (Z_TYPE_P(stmt->result.vars[i]) == IS_STRING) { - STR_FREE(stmt->result.vars[i]->value.str.val); - } + zval_ptr_dtor(result); if (!stmt->result.is_null[i]) { switch (stmt->result.buf[i].type) { case IS_LONG: @@ -1040,11 +986,11 @@ void mysqli_stmt_fetch_libmysql(INTERNAL_FUNCTION_PARAMETERS) { /* unsigned int (11) */ uval= *(unsigned int *) stmt->result.buf[i].val; -#if SIZEOF_LONG==4 +#if SIZEOF_ZEND_LONG==4 if (uval > INT_MAX) { char *tmp, *p; - int j=10; - tmp= emalloc(11); + int j = 10; + tmp = emalloc(11); p= &tmp[9]; do { *p-- = (uval % 10) + 48; @@ -1052,15 +998,16 @@ void mysqli_stmt_fetch_libmysql(INTERNAL_FUNCTION_PARAMETERS) } while (--j > 0); tmp[10]= '\0'; /* unsigned int > INT_MAX is 10 digits - ALWAYS */ - ZVAL_STRINGL(stmt->result.vars[i], tmp, 10, 0); + ZVAL_STRINGL(result, tmp, 10); + efree(tmp); break; } #endif } if (stmt->stmt->fields[i].flags & UNSIGNED_FLAG) { - ZVAL_LONG(stmt->result.vars[i], *(unsigned int *)stmt->result.buf[i].val); + ZVAL_LONG(result, *(unsigned int *)stmt->result.buf[i].val); } else { - ZVAL_LONG(stmt->result.vars[i], *(int *)stmt->result.buf[i].val); + ZVAL_LONG(result, *(int *)stmt->result.buf[i].val); } break; case IS_DOUBLE: @@ -1077,7 +1024,7 @@ void mysqli_stmt_fetch_libmysql(INTERNAL_FUNCTION_PARAMETERS) dval = *((double *)stmt->result.buf[i].val); } - ZVAL_DOUBLE(stmt->result.vars[i], dval); + ZVAL_DOUBLE(result, dval); break; } case IS_STRING: @@ -1086,7 +1033,7 @@ void mysqli_stmt_fetch_libmysql(INTERNAL_FUNCTION_PARAMETERS) || stmt->stmt->bind[i].buffer_type == MYSQL_TYPE_BIT #endif ) { - my_bool uns= (stmt->stmt->fields[i].flags & UNSIGNED_FLAG)? 1:0; + my_bool uns = (stmt->stmt->fields[i].flags & UNSIGNED_FLAG)? 1:0; #if MYSQL_VERSION_ID > 50002 if (stmt->stmt->bind[i].buffer_type == MYSQL_TYPE_BIT) { switch (stmt->result.buf[i].output_len) { @@ -1104,9 +1051,9 @@ void mysqli_stmt_fetch_libmysql(INTERNAL_FUNCTION_PARAMETERS) { llval= *(my_ulonglong *) stmt->result.buf[i].val; } -#if SIZEOF_LONG==8 +#if SIZEOF_ZEND_LONG==8 if (uns && llval > 9223372036854775807L) { -#elif SIZEOF_LONG==4 +#elif SIZEOF_ZEND_LONG==4 if ((uns && llval > L64(2147483647)) || (!uns && (( L64(2147483647) < (my_longlong) llval) || (L64(-2147483648) > (my_longlong) llval)))) @@ -1118,22 +1065,20 @@ void mysqli_stmt_fetch_libmysql(INTERNAL_FUNCTION_PARAMETERS) * use MYSQLI_LL_SPEC. */ snprintf(tmp, sizeof(tmp), (stmt->stmt->fields[i].flags & UNSIGNED_FLAG)? MYSQLI_LLU_SPEC : MYSQLI_LL_SPEC, llval); - ZVAL_STRING(stmt->result.vars[i], tmp, 1); + ZVAL_STRING(result, tmp); } else { - ZVAL_LONG(stmt->result.vars[i], llval); + ZVAL_LONG(result, llval); } } else { #if defined(MYSQL_DATA_TRUNCATED) && MYSQL_VERSION_ID > 50002 if (ret == MYSQL_DATA_TRUNCATED && *(stmt->stmt->bind[i].error) != 0) { /* result was truncated */ - ZVAL_STRINGL(stmt->result.vars[i], stmt->result.buf[i].val, - stmt->stmt->bind[i].buffer_length, 1); + ZVAL_STRINGL(result, stmt->result.buf[i].val, stmt->stmt->bind[i].buffer_length); } else { #else { #endif - ZVAL_STRINGL(stmt->result.vars[i], stmt->result.buf[i].val, - stmt->result.buf[i].output_len, 1); + ZVAL_STRINGL(result, stmt->result.buf[i].val, stmt->result.buf[i].output_len); } } break; @@ -1141,7 +1086,7 @@ void mysqli_stmt_fetch_libmysql(INTERNAL_FUNCTION_PARAMETERS) break; } } else { - ZVAL_NULL(stmt->result.vars[i]); + ZVAL_NULL(result); } } } else { @@ -1176,10 +1121,10 @@ void mysqli_stmt_fetch_mysqlnd(INTERNAL_FUNCTION_PARAMETERS) zval *mysql_stmt; zend_bool fetched_anything; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); if (FAIL == mysqlnd_stmt_fetch(stmt->stmt, &fetched_anything)) { RETURN_BOOL(FALSE); @@ -1192,8 +1137,7 @@ void mysqli_stmt_fetch_mysqlnd(INTERNAL_FUNCTION_PARAMETERS) #endif /* }}} */ - -/* {{{ proto mixed mysqli_stmt_fetch(object stmt) U +/* {{{ proto mixed mysqli_stmt_fetch(object stmt) Fetch results from a prepared statement into the bound variables */ PHP_FUNCTION(mysqli_stmt_fetch) { @@ -1206,20 +1150,25 @@ PHP_FUNCTION(mysqli_stmt_fetch) /* }}} */ /* {{{ php_add_field_properties */ -static void php_add_field_properties(zval *value, const MYSQL_FIELD *field TSRMLS_DC) +static void php_add_field_properties(zval *value, const MYSQL_FIELD *field) { - add_property_string(value, "name",(field->name ? field->name : ""), 1); - add_property_string(value, "orgname",(field->org_name ? field->org_name : ""), 1); - add_property_string(value, "table",(field->table ? field->table : ""), 1); - add_property_string(value, "orgtable",(field->org_table ? field->org_table : ""), 1); - add_property_string(value, "def",(field->def ? field->def : ""), 1); - add_property_string(value, "db",(field->db ? field->db : ""), 1); +#ifdef MYSQLI_USE_MYSQLND + add_property_str(value, "name", zend_string_copy(field->sname)); +#else + add_property_stringl(value, "name",(field->name ? field->name : ""), field->name_length); +#endif + + add_property_stringl(value, "orgname", (field->org_name ? field->org_name : ""), field->org_name_length); + add_property_stringl(value, "table", (field->table ? field->table : ""), field->table_length); + add_property_stringl(value, "orgtable", (field->org_table ? field->org_table : ""), field->org_table_length); + add_property_stringl(value, "def", (field->def ? field->def : ""), field->def_length); + add_property_stringl(value, "db", (field->db ? field->db : ""), field->db_length); /* FIXME: manually set the catalog to "def" due to bug in * libmysqlclient which does not initialize field->catalog * and in addition, the catalog is always be "def" */ - add_property_string(value, "catalog", "def", 1); + add_property_string(value, "catalog", "def"); add_property_long(value, "max_length", field->max_length); add_property_long(value, "length", field->length); @@ -1238,18 +1187,18 @@ PHP_FUNCTION(mysqli_fetch_field) zval *mysql_result; const MYSQL_FIELD *field; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); if (!(field = mysql_fetch_field(result))) { RETURN_FALSE; } object_init(return_value); - php_add_field_properties(return_value, field TSRMLS_CC); + php_add_field_properties(return_value, field); } /* }}} */ @@ -1259,26 +1208,25 @@ PHP_FUNCTION(mysqli_fetch_fields) { MYSQL_RES *result; zval *mysql_result; - zval *obj; + zval obj; 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_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); array_init(return_value); for (i = 0; i < mysql_num_fields(result); i++) { const MYSQL_FIELD *field = mysql_fetch_field_direct(result, i); - MAKE_STD_ZVAL(obj); - object_init(obj); + object_init(&obj); - php_add_field_properties(obj, field TSRMLS_CC); - add_index_zval(return_value, i, obj); + php_add_field_properties(&obj, field); + add_index_zval(return_value, i, &obj); } } /* }}} */ @@ -1290,16 +1238,16 @@ PHP_FUNCTION(mysqli_fetch_field_direct) MYSQL_RES *result; zval *mysql_result; const MYSQL_FIELD *field; - long offset; + zend_long offset; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_result, mysqli_result_class_entry, &offset) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ol", &mysql_result, mysqli_result_class_entry, &offset) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); - if (offset < 0 || offset >= (long) mysql_num_fields(result)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Field offset is invalid for resultset"); + if (offset < 0 || offset >= (zend_long) mysql_num_fields(result)) { + php_error_docref(NULL, E_WARNING, "Field offset is invalid for resultset"); RETURN_FALSE; } @@ -1308,7 +1256,7 @@ PHP_FUNCTION(mysqli_fetch_field_direct) } object_init(return_value); - php_add_field_properties(return_value, field TSRMLS_CC); + php_add_field_properties(return_value, field); } /* }}} */ @@ -1319,13 +1267,13 @@ PHP_FUNCTION(mysqli_fetch_lengths) MYSQL_RES *result; zval *mysql_result; unsigned int i; - unsigned long *ret; + zend_ulong *ret; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); if (!(ret = mysql_fetch_lengths(result))) { RETURN_FALSE; @@ -1355,10 +1303,10 @@ PHP_FUNCTION(mysqli_field_count) MY_MYSQL *mysql; zval *mysql_link; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); RETURN_LONG(mysql_field_count(mysql->mysql)); } @@ -1371,15 +1319,15 @@ PHP_FUNCTION(mysqli_field_seek) { MYSQL_RES *result; zval *mysql_result; - unsigned long fieldnr; + zend_long fieldnr; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_result, mysqli_result_class_entry, &fieldnr) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ol", &mysql_result, mysqli_result_class_entry, &fieldnr) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); if (fieldnr < 0 || fieldnr >= mysql_num_fields(result)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid field offset"); + php_error_docref(NULL, E_WARNING, "Invalid field offset"); RETURN_FALSE; } @@ -1395,10 +1343,10 @@ PHP_FUNCTION(mysqli_field_tell) MYSQL_RES *result; zval *mysql_result; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); RETURN_LONG(mysql_field_tell(result)); } @@ -1411,13 +1359,13 @@ PHP_FUNCTION(mysqli_free_result) MYSQL_RES *result; zval *mysql_result; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); mysqli_free_result(result, FALSE); - MYSQLI_CLEAR_RESOURCE(&mysql_result); + MYSQLI_CLEAR_RESOURCE(mysql_result); } /* }}} */ @@ -1427,7 +1375,7 @@ PHP_FUNCTION(mysqli_get_client_info) { const char * info = mysql_get_client_info(); if (info) { - RETURN_STRING(info, 1); + RETURN_STRING(info); } } /* }}} */ @@ -1436,7 +1384,7 @@ PHP_FUNCTION(mysqli_get_client_info) Get MySQL client info */ PHP_FUNCTION(mysqli_get_client_version) { - RETURN_LONG((long)mysql_get_client_version()); + RETURN_LONG((zend_long)mysql_get_client_version()); } /* }}} */ @@ -1447,14 +1395,14 @@ PHP_FUNCTION(mysqli_get_host_info) MY_MYSQL *mysql; zval *mysql_link = NULL; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); #if !defined(MYSQLI_USE_MYSQLND) - RETURN_STRING((mysql->mysql->host_info) ? mysql->mysql->host_info : "", 1); + RETURN_STRING((mysql->mysql->host_info) ? mysql->mysql->host_info : ""); #else - RETURN_STRING((mysql->mysql->data->host_info) ? mysql->mysql->data->host_info : "", 1); + RETURN_STRING((mysql->mysql->data->host_info) ? mysql->mysql->data->host_info : ""); #endif } /* }}} */ @@ -1466,10 +1414,10 @@ PHP_FUNCTION(mysqli_get_proto_info) MY_MYSQL *mysql; zval *mysql_link = NULL; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); RETURN_LONG(mysql_get_proto_info(mysql->mysql)); } /* }}} */ @@ -1482,14 +1430,14 @@ PHP_FUNCTION(mysqli_get_server_info) zval *mysql_link = NULL; const char *info; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); info = mysql_get_server_info(mysql->mysql); if (info) { - RETURN_STRING(info, 1); + RETURN_STRING(info); } } /* }}} */ @@ -1501,10 +1449,10 @@ PHP_FUNCTION(mysqli_get_server_version) MY_MYSQL *mysql; zval *mysql_link = NULL; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); RETURN_LONG(mysql_get_server_version(mysql->mysql)); } @@ -1518,26 +1466,32 @@ PHP_FUNCTION(mysqli_info) zval *mysql_link = NULL; const char *info; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); info = mysql_info(mysql->mysql); if (info) { - RETURN_STRING(info, 1); + RETURN_STRING(info); } } /* }}} */ - /* {{{ php_mysqli_init() */ void php_mysqli_init(INTERNAL_FUNCTION_PARAMETERS) { MYSQLI_RESOURCE *mysqli_resource; MY_MYSQL *mysql; - if (getThis() && ((mysqli_object *) zend_object_store_get_object(getThis() TSRMLS_CC))->ptr) { +// 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) { return; } @@ -1561,15 +1515,14 @@ 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 TSRMLS_CC)) { + if (!getThis() || !instanceof_function(Z_OBJCE_P(getThis()), mysqli_link_class_entry)) { MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_link_class_entry); } else { - ((mysqli_object *) zend_object_store_get_object(getThis() TSRMLS_CC))->ptr = mysqli_resource; + (Z_MYSQLI_P(getThis()))->ptr = mysqli_resource; } } /* }}} */ - /* {{{ proto resource mysqli_init(void) Initialize mysqli and return a resource for use with mysql_real_connect */ PHP_FUNCTION(mysqli_init) @@ -1586,12 +1539,12 @@ PHP_FUNCTION(mysqli_insert_id) my_ulonglong rc; zval *mysql_link; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); rc = mysql_insert_id(mysql->mysql); - MYSQLI_RETURN_LONG_LONG(rc) + MYSQLI_RETURN_LONG_INT(rc) } /* }}} */ @@ -1601,15 +1554,15 @@ PHP_FUNCTION(mysqli_kill) { MY_MYSQL *mysql; zval *mysql_link; - long processid; + zend_long processid; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_link, mysqli_link_class_entry, &processid) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ol", &mysql_link, mysqli_link_class_entry, &processid) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); if (processid <= 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "processid should have positive value"); + php_error_docref(NULL, E_WARNING, "processid should have positive value"); RETURN_FALSE; } @@ -1628,10 +1581,10 @@ PHP_FUNCTION(mysqli_more_results) MY_MYSQL *mysql; zval *mysql_link; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); RETURN_BOOL(mysql_more_results(mysql->mysql)); } @@ -1643,13 +1596,13 @@ PHP_FUNCTION(mysqli_next_result) { MY_MYSQL *mysql; zval *mysql_link; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); if (!mysql_more_results(mysql->mysql)) { - php_error_docref(NULL TSRMLS_CC, E_STRICT, "There is no next result set. " + php_error_docref(NULL, E_STRICT, "There is no next result set. " "Please, call mysqli_more_results()/mysqli::more_results() to check " "whether to call this function/method"); } @@ -1666,29 +1619,28 @@ PHP_FUNCTION(mysqli_stmt_more_results) MY_STMT *stmt; zval *mysql_stmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); RETURN_BOOL(mysqlnd_stmt_more_results(stmt->stmt)); } /* }}} */ - /* {{{ proto bool mysqli_stmt_next_result(object link) read next result from multi_query */ PHP_FUNCTION(mysqli_stmt_next_result) { MY_STMT *stmt; zval *mysql_stmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); if (!mysqlnd_stmt_more_results(stmt->stmt)) { - php_error_docref(NULL TSRMLS_CC, E_STRICT, "There is no next result set. " + php_error_docref(NULL, E_STRICT, "There is no next result set. " "Please, call mysqli_stmt_more_results()/mysqli_stmt::more_results() to check " "whether to call this function/method"); } @@ -1698,7 +1650,6 @@ PHP_FUNCTION(mysqli_stmt_next_result) { /* }}} */ #endif - /* {{{ proto int mysqli_num_fields(object result) Get number of fields in result */ PHP_FUNCTION(mysqli_num_fields) @@ -1706,10 +1657,10 @@ PHP_FUNCTION(mysqli_num_fields) MYSQL_RES *result; zval *mysql_result; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); RETURN_LONG(mysql_num_fields(result)); } @@ -1722,17 +1673,17 @@ PHP_FUNCTION(mysqli_num_rows) MYSQL_RES *result; zval *mysql_result; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_result, mysqli_result_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); if (mysqli_result_is_unbuffered_and_not_everything_is_fetched(result)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Function cannot be used with MYSQL_USE_RESULT"); + php_error_docref(NULL, E_WARNING, "Function cannot be used with MYSQL_USE_RESULT"); RETURN_LONG(0); } - MYSQLI_RETURN_LONG_LONG(mysql_num_rows(result)); + MYSQLI_RETURN_LONG_INT(mysql_num_rows(result)); } /* }}} */ @@ -1741,7 +1692,8 @@ static int mysqli_options_get_option_zval_type(int option) { switch (option) { #ifdef MYSQLI_USE_MYSQLND -#if PHP_MAJOR_VERSION >= 6 +#if PHP_MAJOR_VERSION == 6 + /* PHP-7 doesn't supprt unicode yet ??? */ case MYSQLND_OPT_NUMERIC_AND_DATETIME_AS_UNICODE: #endif case MYSQLND_OPT_NET_CMD_BUFFER_SIZE: @@ -1806,23 +1758,22 @@ static int mysqli_options_get_option_zval_type(int option) } /* }}} */ - /* {{{ proto bool mysqli_options(object link, int flags, mixed values) Set options */ PHP_FUNCTION(mysqli_options) { MY_MYSQL *mysql; zval *mysql_link = NULL; - zval **mysql_value; - long mysql_option; + zval *mysql_value; + zend_long mysql_option; unsigned int l_value; - long ret; + zend_long ret; int expected_type; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OlZ", &mysql_link, mysqli_link_class_entry, &mysql_option, &mysql_value) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Olz", &mysql_link, mysqli_link_class_entry, &mysql_option, &mysql_value) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_INITIALIZED); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_INITIALIZED); #if PHP_API_VERSION < 20100412 if ((PG(open_basedir) && PG(open_basedir)[0] != '\0') || PG(safe_mode)) { @@ -1834,7 +1785,7 @@ PHP_FUNCTION(mysqli_options) } } expected_type = mysqli_options_get_option_zval_type(mysql_option); - if (expected_type != Z_TYPE_PP(mysql_value)) { + if (expected_type != Z_TYPE_P(mysql_value)) { switch (expected_type) { case IS_STRING: convert_to_string_ex(mysql_value); @@ -1848,10 +1799,10 @@ PHP_FUNCTION(mysqli_options) } switch (expected_type) { case IS_STRING: - ret = mysql_options(mysql->mysql, mysql_option, Z_STRVAL_PP(mysql_value)); + ret = mysql_options(mysql->mysql, mysql_option, Z_STRVAL_P(mysql_value)); break; case IS_LONG: - l_value = Z_LVAL_PP(mysql_value); + l_value = Z_LVAL_P(mysql_value); ret = mysql_options(mysql->mysql, mysql_option, (char *)&l_value); break; default: @@ -1863,19 +1814,18 @@ PHP_FUNCTION(mysqli_options) } /* }}} */ - /* {{{ proto bool mysqli_ping(object link) Ping a server connection or reconnect if there is no connection */ PHP_FUNCTION(mysqli_ping) { MY_MYSQL *mysql; zval *mysql_link; - long rc; + zend_long rc; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); rc = mysql_ping(mysql->mysql); MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); @@ -1890,18 +1840,18 @@ PHP_FUNCTION(mysqli_prepare) MY_MYSQL *mysql; MY_STMT *stmt; char *query = NULL; - int query_len; + size_t 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_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os",&mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); #if !defined(MYSQLI_USE_MYSQLND) if (mysql->mysql->status == MYSQL_STATUS_GET_RESULT) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "All data must be fetched before a new statement prepare takes place"); + php_error_docref(NULL, E_WARNING, "All data must be fetched before a new statement prepare takes place"); RETURN_FALSE; } #endif @@ -1951,8 +1901,7 @@ PHP_FUNCTION(mysqli_prepare) RETURN_FALSE; } #ifndef MYSQLI_USE_MYSQLND - stmt->link_handle = Z_OBJ_HANDLE(*mysql_link); - zend_objects_store_add_ref_by_handle(stmt->link_handle TSRMLS_CC); + ZVAL_COPY(&stmt->link_handle, mysql_link); #endif mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); @@ -1964,7 +1913,6 @@ PHP_FUNCTION(mysqli_prepare) } /* }}} */ - /* {{{ proto bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]]) Open a connection to a mysql server */ PHP_FUNCTION(mysqli_real_connect) @@ -1973,7 +1921,6 @@ PHP_FUNCTION(mysqli_real_connect) } /* }}} */ - /* {{{ proto bool mysqli_real_query(object link, string query) Binary-safe version of mysql_query() */ PHP_FUNCTION(mysqli_real_query) @@ -1981,12 +1928,12 @@ PHP_FUNCTION(mysqli_real_query) MY_MYSQL *mysql; zval *mysql_link; char *query = NULL; - int query_len; + size_t query_len; - 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_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); MYSQLI_DISABLE_MQ; /* disable multi statements/queries */ @@ -1997,7 +1944,7 @@ PHP_FUNCTION(mysqli_real_query) if (!mysql_field_count(mysql->mysql)) { if (MyG(report_mode) & MYSQLI_REPORT_INDEX) { - php_mysqli_report_index(query, mysqli_server_status(mysql->mysql) TSRMLS_CC); + php_mysqli_report_index(query, mysqli_server_status(mysql->mysql)); } } @@ -2010,40 +1957,40 @@ PHP_FUNCTION(mysqli_real_query) PHP_FUNCTION(mysqli_real_escape_string) { MY_MYSQL *mysql; zval *mysql_link = NULL; - char *escapestr, *newstr; - int escapestr_len, newstr_len; + char *escapestr; + size_t escapestr_len; + zend_string *newstr; - 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_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &mysql_link, mysqli_link_class_entry, &escapestr, &escapestr_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); - newstr = safe_emalloc(2, escapestr_len, 1); - newstr_len = mysql_real_escape_string(mysql->mysql, newstr, escapestr, escapestr_len); - newstr = erealloc(newstr, newstr_len + 1); + newstr = zend_string_alloc(2 * escapestr_len, 0); + newstr->len = mysql_real_escape_string(mysql->mysql, newstr->val, escapestr, escapestr_len); + newstr = zend_string_truncate(newstr, newstr->len, 0); - RETURN_STRINGL(newstr, newstr_len, 0); + RETURN_NEW_STR(newstr); } /* }}} */ - /* {{{ proto bool mysqli_rollback(object link) Undo actions from current transaction */ PHP_FUNCTION(mysqli_rollback) { MY_MYSQL *mysql; zval *mysql_link; - long flags = TRANS_COR_NO_OPT; + zend_long flags = TRANS_COR_NO_OPT; char * name = NULL; - int name_len = 0; + size_t name_len = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|ls", &mysql_link, mysqli_link_class_entry, &flags, &name, &name_len) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|ls", &mysql_link, mysqli_link_class_entry, &flags, &name, &name_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); #if !defined(MYSQLI_USE_MYSQLND) - if (mysqli_commit_or_rollback_libmysql(mysql->mysql, FALSE, flags, name TSRMLS_CC)) { + if (mysqli_commit_or_rollback_libmysql(mysql->mysql, FALSE, flags, name)) { #else if (FAIL == mysqlnd_rollback(mysql->mysql, flags, name)) { #endif @@ -2060,16 +2007,16 @@ PHP_FUNCTION(mysqli_stmt_send_long_data) MY_STMT *stmt; zval *mysql_stmt; char *data; - long param_nr; - int data_len; + zend_long param_nr; + size_t 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_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ols", &mysql_stmt, mysqli_stmt_class_entry, ¶m_nr, &data, &data_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); if (param_nr < 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter number"); + php_error_docref(NULL, E_WARNING, "Invalid parameter number"); RETURN_FALSE; } if (mysql_stmt_send_long_data(stmt->stmt, param_nr, data, data_len)) { @@ -2079,7 +2026,6 @@ PHP_FUNCTION(mysqli_stmt_send_long_data) } /* }}} */ - /* {{{ proto mixed mysqli_stmt_affected_rows(object stmt) Return the number of rows affected in the last query for the given link */ PHP_FUNCTION(mysqli_stmt_affected_rows) @@ -2088,16 +2034,16 @@ PHP_FUNCTION(mysqli_stmt_affected_rows) zval *mysql_stmt; my_ulonglong rc; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); rc = mysql_stmt_affected_rows(stmt->stmt); if (rc == (my_ulonglong) -1) { RETURN_LONG(-1); } - MYSQLI_RETURN_LONG_LONG(rc) + MYSQLI_RETURN_LONG_INT(rc) } /* }}} */ @@ -2108,15 +2054,15 @@ PHP_FUNCTION(mysqli_stmt_close) MY_STMT *stmt; zval *mysql_stmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); mysqli_stmt_close(stmt->stmt, FALSE); stmt->stmt = NULL; - php_clear_stmt_bind(stmt TSRMLS_CC); - MYSQLI_CLEAR_RESOURCE(&mysql_stmt); + php_clear_stmt_bind(stmt); + MYSQLI_CLEAR_RESOURCE(mysql_stmt); RETURN_TRUE; } /* }}} */ @@ -2127,17 +2073,17 @@ PHP_FUNCTION(mysqli_stmt_data_seek) { MY_STMT *stmt; zval *mysql_stmt; - long offset; + zend_long offset; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_stmt, mysqli_stmt_class_entry, &offset) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ol", &mysql_stmt, mysqli_stmt_class_entry, &offset) == FAILURE) { return; } if (offset < 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset must be positive"); + php_error_docref(NULL, E_WARNING, "Offset must be positive"); RETURN_FALSE; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); mysql_stmt_data_seek(stmt->stmt, offset); } @@ -2150,10 +2096,10 @@ PHP_FUNCTION(mysqli_stmt_field_count) MY_STMT *stmt; zval *mysql_stmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); RETURN_LONG(mysql_stmt_field_count(stmt->stmt)); } @@ -2166,11 +2112,11 @@ PHP_FUNCTION(mysqli_stmt_free_result) MY_STMT *stmt; zval *mysql_stmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); mysql_stmt_free_result(stmt->stmt); } @@ -2184,12 +2130,12 @@ PHP_FUNCTION(mysqli_stmt_insert_id) my_ulonglong rc; zval *mysql_stmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); rc = mysql_stmt_insert_id(stmt->stmt); - MYSQLI_RETURN_LONG_LONG(rc) + MYSQLI_RETURN_LONG_INT(rc) } /* }}} */ @@ -2200,10 +2146,10 @@ PHP_FUNCTION(mysqli_stmt_param_count) MY_STMT *stmt; zval *mysql_stmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); RETURN_LONG(mysql_stmt_param_count(stmt->stmt)); } @@ -2216,11 +2162,11 @@ PHP_FUNCTION(mysqli_stmt_reset) MY_STMT *stmt; zval *mysql_stmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); if (mysql_stmt_reset(stmt->stmt)) { RETURN_FALSE; @@ -2237,14 +2183,14 @@ PHP_FUNCTION(mysqli_stmt_num_rows) zval *mysql_stmt; my_ulonglong rc; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); rc = mysql_stmt_num_rows(stmt->stmt); - MYSQLI_RETURN_LONG_LONG(rc) + MYSQLI_RETURN_LONG_INT(rc) } /* }}} */ @@ -2255,12 +2201,12 @@ PHP_FUNCTION(mysqli_select_db) MY_MYSQL *mysql; zval *mysql_link; char *dbname; - int dbname_len; + size_t dbname_len; - 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_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &mysql_link, mysqli_link_class_entry, &dbname, &dbname_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); if (mysql_select_db(mysql->mysql, dbname)) { MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); @@ -2278,30 +2224,30 @@ PHP_FUNCTION(mysqli_sqlstate) zval *mysql_link; const char *state; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); state = mysql_sqlstate(mysql->mysql); if (state) { - RETURN_STRING(state, 1); + RETURN_STRING(state); } } /* }}} */ -/* {{{ proto bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher]) U +/* {{{ proto bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher]) */ PHP_FUNCTION(mysqli_ssl_set) { MY_MYSQL *mysql; zval *mysql_link; char *ssl_parm[5]; - int ssl_parm_len[5], i; + size_t ssl_parm_len[5], i; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Osssss", &mysql_link, mysqli_link_class_entry, &ssl_parm[0], &ssl_parm_len[0], &ssl_parm[1], &ssl_parm_len[1], &ssl_parm[2], &ssl_parm_len[2], &ssl_parm[3], &ssl_parm_len[3], &ssl_parm[4], &ssl_parm_len[4]) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Osssss", &mysql_link, mysqli_link_class_entry, &ssl_parm[0], &ssl_parm_len[0], &ssl_parm[1], &ssl_parm_len[1], &ssl_parm[2], &ssl_parm_len[2], &ssl_parm[3], &ssl_parm_len[3], &ssl_parm[4], &ssl_parm_len[4]) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_INITIALIZED); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_INITIALIZED); for (i = 0; i < 5; i++) { if (!ssl_parm_len[i]) { @@ -2321,24 +2267,25 @@ PHP_FUNCTION(mysqli_stat) { MY_MYSQL *mysql; zval *mysql_link; - char *stat; #if defined(MYSQLI_USE_MYSQLND) - uint stat_len; + zend_string *stat; +#else + char *stat; #endif - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); #if !defined(MYSQLI_USE_MYSQLND) if ((stat = (char *)mysql_stat(mysql->mysql))) { - RETURN_STRING(stat, 1); + RETURN_STRING(stat); #else - if (mysqlnd_stat(mysql->mysql, &stat, &stat_len) == PASS) + if (mysqlnd_stat(mysql->mysql, &stat) == PASS) { - RETURN_STRINGL(stat, stat_len, 0); + RETURN_STR(stat); #endif } else { RETURN_FALSE; @@ -2353,12 +2300,12 @@ PHP_FUNCTION(mysqli_refresh) { MY_MYSQL *mysql; zval *mysql_link = NULL; - long options; + zend_long options; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_link, mysqli_link_class_entry, &options) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ol", &mysql_link, mysqli_link_class_entry, &options) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_INITIALIZED); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_INITIALIZED); #ifdef MYSQLI_USE_MYSQLND RETURN_BOOL(!mysql_refresh(mysql->mysql, (uint8_t) options)); #else @@ -2373,21 +2320,21 @@ PHP_FUNCTION(mysqli_stmt_attr_set) { MY_STMT *stmt; zval *mysql_stmt; - long mode_in; + zend_long mode_in; #if MYSQL_VERSION_ID >= 50107 my_bool mode_b; #endif - ulong mode; - ulong attr; + zend_ulong mode; + zend_long attr; void *mode_p; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll", &mysql_stmt, mysqli_stmt_class_entry, &attr, &mode_in) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oll", &mysql_stmt, mysqli_stmt_class_entry, &attr, &mode_in) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); if (mode_in < 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "mode should be non-negative, %ld passed", mode_in); + php_error_docref(NULL, E_WARNING, "mode should be non-negative, %pd passed", mode_in); RETURN_FALSE; } @@ -2420,14 +2367,14 @@ PHP_FUNCTION(mysqli_stmt_attr_get) { MY_STMT *stmt; zval *mysql_stmt; - ulong value = 0; - ulong attr; + zend_ulong value = 0; + zend_long attr; int rc; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &mysql_stmt, mysqli_stmt_class_entry, &attr) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ol", &mysql_stmt, mysqli_stmt_class_entry, &attr) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); if ((rc = mysql_stmt_attr_get(stmt->stmt, attr, &value))) { RETURN_FALSE; @@ -2437,7 +2384,7 @@ PHP_FUNCTION(mysqli_stmt_attr_get) if (attr == STMT_ATTR_UPDATE_MAX_LENGTH) value = *((my_bool *)&value); #endif - RETURN_LONG((long)value); + RETURN_LONG((zend_ulong)value); } /* }}} */ @@ -2448,10 +2395,10 @@ PHP_FUNCTION(mysqli_stmt_errno) MY_STMT *stmt; zval *mysql_stmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_INITIALIZED); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_INITIALIZED); RETURN_LONG(mysql_stmt_errno(stmt->stmt)); } @@ -2465,14 +2412,14 @@ PHP_FUNCTION(mysqli_stmt_error) zval *mysql_stmt; const char * err; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_INITIALIZED); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_INITIALIZED); err = mysql_stmt_error(stmt->stmt); if (err) { - RETURN_STRING(err, 1); + RETURN_STRING(err); } } /* }}} */ @@ -2487,10 +2434,10 @@ PHP_FUNCTION(mysqli_stmt_init) zval *mysql_link; 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_method_parameters(ZEND_NUM_ARGS(), getThis(), "O",&mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT)); @@ -2499,8 +2446,7 @@ PHP_FUNCTION(mysqli_stmt_init) RETURN_FALSE; } #ifndef MYSQLI_USE_MYSQLND - stmt->link_handle = Z_OBJ_HANDLE(*mysql_link); - zend_objects_store_add_ref_by_handle(stmt->link_handle TSRMLS_CC); + ZVAL_COPY(&stmt->link_handle, mysql_link); #endif mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); @@ -2518,19 +2464,19 @@ PHP_FUNCTION(mysqli_stmt_prepare) MY_STMT *stmt; zval *mysql_stmt; char *query; - int query_len; + size_t query_len; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_stmt, mysqli_stmt_class_entry, &query, &query_len) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &mysql_stmt, mysqli_stmt_class_entry, &query, &query_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_INITIALIZED); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_INITIALIZED); if (mysql_stmt_prepare(stmt->stmt, query, query_len)) { MYSQLI_REPORT_STMT_ERROR(stmt->stmt); RETURN_FALSE; } /* change status */ - MYSQLI_SET_STATUS(&mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_SET_STATUS(mysql_stmt, MYSQLI_STATUS_VALID); RETURN_TRUE; } /* }}} */ @@ -2544,10 +2490,10 @@ PHP_FUNCTION(mysqli_stmt_result_metadata) zval *mysql_stmt; 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_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); if (!(result = mysql_stmt_result_metadata(stmt->stmt))){ MYSQLI_REPORT_STMT_ERROR(stmt->stmt); @@ -2561,17 +2507,17 @@ PHP_FUNCTION(mysqli_stmt_result_metadata) } /* }}} */ -/* {{{ proto bool mysqli_stmt_store_result(stmt) +/* {{{ proto bool mysqli_stmt_store_result(object stmt) */ PHP_FUNCTION(mysqli_stmt_store_result) { MY_STMT *stmt; zval *mysql_stmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); #if !defined(MYSQLI_USE_MYSQLND) { @@ -2618,19 +2564,19 @@ PHP_FUNCTION(mysqli_stmt_sqlstate) zval *mysql_stmt; const char * state; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); state = mysql_stmt_sqlstate(stmt->stmt); if (state) { - RETURN_STRING(state, 1); + RETURN_STRING(state); } } /* }}} */ -/* {{{ proto object mysqli_store_result(object link [, flags]) +/* {{{ proto object mysqli_store_result(object link [, int flags]) Buffer result set on client */ PHP_FUNCTION(mysqli_store_result) { @@ -2638,13 +2584,13 @@ PHP_FUNCTION(mysqli_store_result) MYSQL_RES *result; zval *mysql_link; MYSQLI_RESOURCE *mysqli_resource; - long flags = 0; + zend_long flags = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|l", &mysql_link, mysqli_link_class_entry, &flags) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|l", &mysql_link, mysqli_link_class_entry, &flags) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); #if MYSQLI_USE_MYSQLND result = flags & MYSQLI_STORE_RESULT_COPY_DATA? mysqlnd_store_result_ofs(mysql->mysql) : mysqlnd_store_result(mysql->mysql); #else @@ -2655,7 +2601,7 @@ PHP_FUNCTION(mysqli_store_result) RETURN_FALSE; } if (MyG(report_mode) & MYSQLI_REPORT_INDEX) { - php_mysqli_report_index("from previous query", mysqli_server_status(mysql->mysql) TSRMLS_CC); + php_mysqli_report_index("from previous query", mysqli_server_status(mysql->mysql)); } mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); @@ -2665,7 +2611,6 @@ PHP_FUNCTION(mysqli_store_result) } /* }}} */ - /* {{{ proto int mysqli_thread_id(object link) Return the current thread ID */ PHP_FUNCTION(mysqli_thread_id) @@ -2673,12 +2618,12 @@ PHP_FUNCTION(mysqli_thread_id) MY_MYSQL *mysql; zval *mysql_link; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); - RETURN_LONG((long) mysql_thread_id(mysql->mysql)); + RETURN_LONG((zend_long) mysql_thread_id(mysql->mysql)); } /* }}} */ @@ -2699,10 +2644,10 @@ PHP_FUNCTION(mysqli_use_result) zval *mysql_link; 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_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); if (!(result = mysql_use_result(mysql->mysql))) { MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); @@ -2710,7 +2655,7 @@ PHP_FUNCTION(mysqli_use_result) } if (MyG(report_mode) & MYSQLI_REPORT_INDEX) { - php_mysqli_report_index("from previous query", mysqli_server_status(mysql->mysql) TSRMLS_CC); + php_mysqli_report_index("from previous query", mysqli_server_status(mysql->mysql)); } mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->ptr = (void *)result; @@ -2726,10 +2671,10 @@ PHP_FUNCTION(mysqli_warning_count) MY_MYSQL *mysql; zval *mysql_link; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); RETURN_LONG(mysql_warning_count(mysql->mysql)); } diff --git a/ext/mysqli/mysqli_driver.c b/ext/mysqli/mysqli_driver.c index 05d5adf191..5c4c80cd6f 100644 --- a/ext/mysqli/mysqli_driver.c +++ b/ext/mysqli/mysqli_driver.c @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2015 The PHP Group | +----------------------------------------------------------------------+ @@ -30,97 +30,90 @@ #include "mysqli_fe.h" #define MAP_PROPERTY_MYG_BOOL_READ(name, value) \ -static int name(mysqli_object *obj, zval **retval TSRMLS_DC) \ +static zval *name(mysqli_object *obj, zval *retval) \ { \ - MAKE_STD_ZVAL(*retval); \ - ZVAL_BOOL(*retval, MyG(value)); \ - return SUCCESS; \ + ZVAL_BOOL(retval, MyG(value)); \ + return retval; \ } \ #define MAP_PROPERTY_MYG_BOOL_WRITE(name, value) \ -static int name(mysqli_object *obj, zval *value TSRMLS_DC) \ +static int name(mysqli_object *obj, zval *value) \ { \ MyG(value) = Z_LVAL_P(value) > 0; \ return SUCCESS; \ } \ #define MAP_PROPERTY_MYG_LONG_READ(name, value) \ -static int name(mysqli_object *obj, zval **retval TSRMLS_DC) \ +static zval *name(mysqli_object *obj, zval *retval) \ { \ - MAKE_STD_ZVAL(*retval); \ - ZVAL_LONG(*retval, MyG(value)); \ - return SUCCESS; \ + ZVAL_LONG(retval, MyG(value)); \ + return retval; \ } \ #define MAP_PROPERTY_MYG_LONG_WRITE(name, value) \ -static int name(mysqli_object *obj, zval *value TSRMLS_DC) \ +static int name(mysqli_object *obj, zval *value) \ { \ MyG(value) = Z_LVAL_P(value); \ return SUCCESS; \ } \ #define MAP_PROPERTY_MYG_STRING_READ(name, value) \ -static int name(mysqli_object *obj, zval **retval TSRMLS_DC) \ +static zval *name(mysqli_object *obj, zval *retval) \ { \ - MAKE_STD_ZVAL(*retval); \ - ZVAL_STRING(*retval, MyG(value), 1); \ - return SUCCESS; \ + ZVAL_STRING(retval, MyG(value)); \ + return retval; \ } \ #define MAP_PROPERTY_MYG_STRING_WRITE(name, value) \ -static int name(mysqli_object *obj, zval *value TSRMLS_DC) \ +static int name(mysqli_object *obj, zval *value) \ { \ MyG(value) = Z_STRVAL_P(value); \ return SUCCESS; \ } \ /* {{{ property driver_report_write */ -static int driver_report_write(mysqli_object *obj, zval *value TSRMLS_DC) +static int driver_report_write(mysqli_object *obj, zval *value) { MyG(report_mode) = Z_LVAL_P(value); /*FIXME*/ - /* zend_replace_error_handling(MyG(report_mode) & MYSQLI_REPORT_STRICT ? EH_THROW : EH_NORMAL, NULL, NULL TSRMLS_CC); */ + /* zend_replace_error_handling(MyG(report_mode) & MYSQLI_REPORT_STRICT ? EH_THROW : EH_NORMAL, NULL, NULL); */ return SUCCESS; } /* }}} */ /* {{{ property driver_embedded_read */ -static int driver_embedded_read(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *driver_embedded_read(mysqli_object *obj, zval *retval) { - MAKE_STD_ZVAL(*retval); #ifdef HAVE_EMBEDDED_MYSQLI - ZVAL_BOOL(*retval, 1); + ZVAL_TRUE(retval); #else - ZVAL_BOOL(*retval, 0); + ZVAL_FALSE(retval); #endif - return SUCCESS; + return retval; } /* }}} */ /* {{{ property driver_client_version_read */ -static int driver_client_version_read(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *driver_client_version_read(mysqli_object *obj, zval *retval) { - MAKE_STD_ZVAL(*retval); - ZVAL_LONG(*retval, MYSQL_VERSION_ID); - return SUCCESS; + ZVAL_LONG(retval, MYSQL_VERSION_ID); + return retval; } /* }}} */ /* {{{ property driver_client_info_read */ -static int driver_client_info_read(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *driver_client_info_read(mysqli_object *obj, zval *retval) { - MAKE_STD_ZVAL(*retval); - ZVAL_STRING(*retval, (char *)mysql_get_client_info(), 1); - return SUCCESS; + ZVAL_STRING(retval, (char *)mysql_get_client_info()); + return retval; } /* }}} */ /* {{{ property driver_driver_version_read */ -static int driver_driver_version_read(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *driver_driver_version_read(mysqli_object *obj, zval *retval) { - MAKE_STD_ZVAL(*retval); - ZVAL_LONG(*retval, MYSQLI_VERSION_ID); - return SUCCESS; + ZVAL_LONG(retval, MYSQLI_VERSION_ID); + return retval; } /* }}} */ @@ -136,7 +129,7 @@ ZEND_FUNCTION(mysqli_driver_construct) mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->ptr = 1; mysqli_resource->status = (ZEND_NUM_ARGS() == 1) ? MYSQLI_STATUS_INITIALIZED : MYSQLI_STATUS_VALID; - ((mysqli_object *) zend_object_store_get_object(getThis() TSRMLS_CC))->ptr = mysqli_resource; + (Z_MYSQLI_P(getThis()))->ptr = mysqli_resource; #endif } @@ -150,19 +143,6 @@ const mysqli_property_entry mysqli_driver_property_entries[] = { {NULL, 0, NULL, NULL} }; -/* {{{ mysqli_warning_property_info_entries */ -const zend_property_info mysqli_driver_property_info_entries[] = { - {ZEND_ACC_PUBLIC, "client_info", sizeof("client_info") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "client_version", sizeof("client_version") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "driver_version", sizeof("driver_version") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "embedded", sizeof("embedded") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "reconnect", sizeof("reconnect") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "report_mode", sizeof("report_mode") - 1, -1, 0, NULL, 0, NULL}, - {0, NULL, 0, -1, 0, NULL, 0, NULL}, -}; -/* }}} */ - - /* {{{ mysqli_driver_methods[] */ const zend_function_entry mysqli_driver_methods[] = { diff --git a/ext/mysqli/mysqli_embedded.c b/ext/mysqli/mysqli_embedded.c index c81a043e56..97232ed0cb 100644 --- a/ext/mysqli/mysqli_embedded.c +++ b/ext/mysqli/mysqli_embedded.c @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2015 The PHP Group | +----------------------------------------------------------------------+ @@ -32,7 +32,7 @@ PHP_FUNCTION(mysqli_embedded_server_start) { #ifdef HAVE_EMBEDDED_MYSQLI - long start; + zend_long start; zval *args; zval *grps; @@ -42,7 +42,7 @@ PHP_FUNCTION(mysqli_embedded_server_start) HashPosition pos; int index, rc; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "laa", &start, &args, &grps) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "laa", &start, &args, &grps) == FAILURE) { return; } diff --git a/ext/mysqli/mysqli_exception.c b/ext/mysqli/mysqli_exception.c index 8409c20e16..cb8d6a0668 100644 --- a/ext/mysqli/mysqli_exception.c +++ b/ext/mysqli/mysqli_exception.c @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2015 The PHP Group | +----------------------------------------------------------------------+ @@ -36,9 +36,9 @@ const zend_function_entry mysqli_exception_methods[] = { }; /* }}} */ -void php_mysqli_throw_sql_exception(char *sqlstate, int errorno TSRMLS_DC, char *format, ...) +void php_mysqli_throw_sql_exception(char *sqlstate, int errorno, char *format, ...) { - zval *sql_ex; + zval sql_ex; va_list arg; char *message; @@ -47,31 +47,30 @@ void php_mysqli_throw_sql_exception(char *sqlstate, int errorno TSRMLS_DC, char va_end(arg);; if (!(MyG(report_mode) & MYSQLI_REPORT_STRICT)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "(%s/%d): %s", sqlstate, errorno, message); + php_error_docref(NULL, E_WARNING, "(%s/%d): %s", sqlstate, errorno, message); efree(message); return; } - MAKE_STD_ZVAL(sql_ex); - object_init_ex(sql_ex, mysqli_exception_class_entry); + object_init_ex(&sql_ex, mysqli_exception_class_entry); if (message) { - zend_update_property_string(mysqli_exception_class_entry, sql_ex, "message", sizeof("message") - 1, - message TSRMLS_CC); + zend_update_property_string(mysqli_exception_class_entry, &sql_ex, "message", sizeof("message") - 1, + message); } if (sqlstate) { - zend_update_property_string(mysqli_exception_class_entry, sql_ex, "sqlstate", sizeof("sqlstate") - 1, - sqlstate TSRMLS_CC); + zend_update_property_string(mysqli_exception_class_entry, &sql_ex, "sqlstate", sizeof("sqlstate") - 1, + sqlstate); } else { - zend_update_property_string(mysqli_exception_class_entry, sql_ex, "sqlstate", sizeof("sqlstate") - 1, - "00000" TSRMLS_CC); + zend_update_property_string(mysqli_exception_class_entry, &sql_ex, "sqlstate", sizeof("sqlstate") - 1, + "00000"); } efree(message); - zend_update_property_long(mysqli_exception_class_entry, sql_ex, "code", sizeof("code") - 1, errorno TSRMLS_CC); + zend_update_property_long(mysqli_exception_class_entry, &sql_ex, "code", sizeof("code") - 1, errorno); - zend_throw_exception_object(sql_ex TSRMLS_CC); + zend_throw_exception_object(&sql_ex); } /* diff --git a/ext/mysqli/mysqli_fe.c b/ext/mysqli/mysqli_fe.c index 6c2c3822f2..cacda52da0 100644 --- a/ext/mysqli/mysqli_fe.c +++ b/ext/mysqli/mysqli_fe.c @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2015 The PHP Group | +----------------------------------------------------------------------+ diff --git a/ext/mysqli/mysqli_fe.h b/ext/mysqli/mysqli_fe.h index 95da5d6bbb..d55a3c4ec7 100644 --- a/ext/mysqli/mysqli_fe.h +++ b/ext/mysqli/mysqli_fe.h @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2015 The PHP Group | +----------------------------------------------------------------------+ diff --git a/ext/mysqli/mysqli_libmysql.h b/ext/mysqli/mysqli_libmysql.h index 6e3486b83c..24ddd460d2 100644 --- a/ext/mysqli/mysqli_libmysql.h +++ b/ext/mysqli/mysqli_libmysql.h @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2015 The PHP Group | +----------------------------------------------------------------------+ diff --git a/ext/mysqli/mysqli_mysqlnd.h b/ext/mysqli/mysqli_mysqlnd.h index b6d23d9ef1..a1656e59eb 100644 --- a/ext/mysqli/mysqli_mysqlnd.h +++ b/ext/mysqli/mysqli_mysqlnd.h @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2009 The PHP Group | +----------------------------------------------------------------------+ diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 2ee6c9eee6..05d6ef7c7c 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2015 The PHP Group | +----------------------------------------------------------------------+ @@ -29,7 +29,7 @@ #include "php.h" #include "php_ini.h" #include "ext/standard/info.h" -#include "ext/standard/php_smart_str.h" +#include "zend_smart_str.h" #include "php_mysqli_structs.h" #include "mysqli_priv.h" @@ -37,12 +37,12 @@ #ifndef zend_parse_parameters_none #define zend_parse_parameters_none() \ - zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") + zend_parse_parameters(ZEND_NUM_ARGS(), "") #endif /* {{{ php_mysqli_set_error */ -static void php_mysqli_set_error(long mysql_errno, char *mysql_err TSRMLS_DC) +static void php_mysqli_set_error(zend_long mysql_errno, char *mysql_err) { MyG(error_no) = mysql_errno; if (MyG(error_msg)) { @@ -56,27 +56,25 @@ static void php_mysqli_set_error(long mysql_errno, char *mysql_err TSRMLS_DC) } /* }}} */ - -void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_connect, zend_bool in_ctor) +void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_connect, zend_bool in_ctor) /* {{{ */ { MY_MYSQL *mysql = NULL; MYSQLI_RESOURCE *mysqli_resource = NULL; zval *object = getThis(); char *hostname = NULL, *username=NULL, *passwd=NULL, *dbname=NULL, *socket=NULL; - int hostname_len = 0, username_len = 0, passwd_len = 0, dbname_len = 0, socket_len = 0; + size_t hostname_len = 0, username_len = 0, passwd_len = 0, dbname_len = 0, socket_len = 0; zend_bool persistent = FALSE; - long port = 0, flags = 0; - uint hash_len; - char *hash_key = NULL; + zend_long port = 0, flags = 0; + zend_string *hash_key = NULL; zend_bool new_connection = FALSE; - zend_rsrc_list_entry *le; + zend_resource *le; mysqli_plist_entry *plist = NULL; zend_bool self_alloced = 0; #if !defined(MYSQL_USE_MYSQLND) if ((MYSQL_VERSION_ID / 100) != (mysql_get_client_version() / 100)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, + php_error_docref(NULL, E_WARNING, "Headers and client library minor version mismatch. Headers:%d Library:%ld", MYSQL_VERSION_ID, mysql_get_client_version()); } @@ -89,13 +87,13 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne hostname = username = dbname = passwd = socket = NULL; if (!is_real_connect) { - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ssssls", &hostname, &hostname_len, &username, &username_len, + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|ssssls", &hostname, &hostname_len, &username, &username_len, &passwd, &passwd_len, &dbname, &dbname_len, &port, &socket, &socket_len) == FAILURE) { return; } - if (object && instanceof_function(Z_OBJCE_P(object), mysqli_link_class_entry TSRMLS_CC)) { - mysqli_resource = ((mysqli_object *) zend_object_store_get_object(object TSRMLS_CC))->ptr; + if (object && instanceof_function(Z_OBJCE_P(object), mysqli_link_class_entry)) { + mysqli_resource = (Z_MYSQLI_P(object))->ptr; if (mysqli_resource && mysqli_resource->ptr) { mysql = (MY_MYSQL*) mysqli_resource->ptr; } @@ -107,14 +105,14 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne flags |= CLIENT_MULTI_RESULTS; /* needed for mysql_multi_query() */ } else { /* We have flags too */ - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|sssslsl", &object, mysqli_link_class_entry, + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|sssslsl", &object, mysqli_link_class_entry, &hostname, &hostname_len, &username, &username_len, &passwd, &passwd_len, &dbname, &dbname_len, &port, &socket, &socket_len, &flags) == FAILURE) { return; } - mysqli_resource = ((mysqli_object *) zend_object_store_get_object(object TSRMLS_CC))->ptr; - MYSQLI_FETCH_RESOURCE_CONN(mysql, &object, MYSQLI_STATUS_INITIALIZED); + mysqli_resource = (Z_MYSQLI_P(object))->ptr; + MYSQLI_FETCH_RESOURCE_CONN(mysql, object, MYSQLI_STATUS_INITIALIZED); /* set some required options */ flags |= CLIENT_MULTI_RESULTS; /* needed for mysql_multi_query() */ @@ -146,25 +144,25 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne (mysqli_resource->status > MYSQLI_STATUS_INITIALIZED)) { /* already connected, we should close the connection */ - php_mysqli_close(mysql, MYSQLI_CLOSE_IMPLICIT, mysqli_resource->status TSRMLS_CC); + php_mysqli_close(mysql, MYSQLI_CLOSE_IMPLICIT, mysqli_resource->status); } if (strlen(SAFE_STR(hostname)) > 2 && !strncasecmp(hostname, "p:", 2)) { hostname += 2; if (!MyG(allow_persistent)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Persistent connections are disabled. Downgrading to normal"); + php_error_docref(NULL, E_WARNING, "Persistent connections are disabled. Downgrading to normal"); } else { mysql->persistent = persistent = TRUE; - hash_len = spprintf(&hash_key, 0, "mysqli_%s_%s%ld%s%s%s", SAFE_STR(hostname), SAFE_STR(socket), + hash_key = strpprintf(0, "mysqli_%s_%s%ld%s%s%s", SAFE_STR(hostname), SAFE_STR(socket), port, SAFE_STR(username), SAFE_STR(dbname), SAFE_STR(passwd)); mysql->hash_key = hash_key; /* check if we can reuse exisiting connection ... */ - if (zend_hash_find(&EG(persistent_list), hash_key, hash_len + 1, (void **)&le) == SUCCESS) { - if (Z_TYPE_P(le) == php_le_pmysqli()) { + if ((le = zend_hash_find_ptr(&EG(persistent_list), hash_key)) != NULL) { + if (le->type == php_le_pmysqli()) { plist = (mysqli_plist_entry *) le->ptr; do { @@ -192,24 +190,24 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne } while (0); } } else { - zend_rsrc_list_entry le; + zend_resource le; le.type = php_le_pmysqli(); le.ptr = plist = calloc(1, sizeof(mysqli_plist_entry)); zend_ptr_stack_init_ex(&plist->free_links, 1); - zend_hash_update(&EG(persistent_list), hash_key, hash_len + 1, (void *)&le, sizeof(le), NULL); + zend_hash_str_update_mem(&EG(persistent_list), hash_key->val, hash_key->len, &le, sizeof(le)); } } } if (MyG(max_links) != -1 && MyG(num_links) >= MyG(max_links)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%ld)", MyG(num_links)); + php_error_docref(NULL, E_WARNING, "Too many open links (%pd)", MyG(num_links)); goto err; } if (persistent && MyG(max_persistent) != -1 && (MyG(num_active_persistent) + MyG(num_inactive_persistent))>= MyG(max_persistent)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open persistent links (%ld)", + php_error_docref(NULL, E_WARNING, "Too many open persistent links (%pd)", MyG(num_active_persistent) + MyG(num_inactive_persistent)); goto err; } @@ -240,12 +238,12 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne if (mysql_real_connect(mysql->mysql, hostname, username, passwd, dbname, port, socket, flags) == NULL) #else if (mysqlnd_connect(mysql->mysql, hostname, username, passwd, passwd_len, dbname, dbname_len, - port, socket, flags, MYSQLND_CLIENT_KNOWS_RSET_COPY_DATA TSRMLS_CC) == NULL) + port, socket, flags, MYSQLND_CLIENT_KNOWS_RSET_COPY_DATA) == NULL) #endif { /* Save error messages - for mysqli_connect_error() & mysqli_connect_errno() */ - php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql) TSRMLS_CC); - php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql) TSRMLS_CC, + php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql)); + php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql), "%s", mysql_error(mysql->mysql)); if (!is_real_connect) { /* free mysql structure */ @@ -256,7 +254,7 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne } /* clear error */ - php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql) TSRMLS_CC); + php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql)); #if !defined(MYSQLI_USE_MYSQLND) mysql->mysql->reconnect = MyG(reconnect); @@ -280,10 +278,10 @@ end: mysql->multi_query = 0; - if (!object || !instanceof_function(Z_OBJCE_P(object), mysqli_link_class_entry TSRMLS_CC)) { + if (!object || !instanceof_function(Z_OBJCE_P(object), mysqli_link_class_entry)) { MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_link_class_entry); } else { - ((mysqli_object *) zend_object_store_get_object(object TSRMLS_CC))->ptr = mysqli_resource; + (Z_MYSQLI_P(object))->ptr = mysqli_resource; } if (!is_real_connect) { return; @@ -293,7 +291,7 @@ end: err: if (mysql->hash_key) { - efree(mysql->hash_key); + zend_string_release(mysql->hash_key); mysql->hash_key = NULL; mysql->persistent = FALSE; } @@ -301,8 +299,7 @@ err: efree(mysql); } RETVAL_FALSE; -} - +} /* }}} */ /* {{{ proto object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]]) Open a connection to a mysql server */ @@ -312,7 +309,6 @@ PHP_FUNCTION(mysqli_connect) } /* }}} */ - /* {{{ proto object mysqli_link_construct() */ PHP_FUNCTION(mysqli_link_construct) @@ -321,7 +317,6 @@ PHP_FUNCTION(mysqli_link_construct) } /* }}} */ - /* {{{ proto int mysqli_connect_errno(void) Returns the numerical value of the error message from last connect command */ PHP_FUNCTION(mysqli_connect_errno) @@ -335,14 +330,13 @@ PHP_FUNCTION(mysqli_connect_errno) PHP_FUNCTION(mysqli_connect_error) { if (MyG(error_msg)) { - RETURN_STRING(MyG(error_msg),1); + RETURN_STRING(MyG(error_msg)); } else { RETURN_NULL(); } } /* }}} */ - /* {{{ proto mixed mysqli_fetch_array (object result [,int resulttype]) Fetch a result row as an associative array, a numeric array, or both */ PHP_FUNCTION(mysqli_fetch_array) @@ -359,7 +353,6 @@ PHP_FUNCTION(mysqli_fetch_assoc) } /* }}} */ - /* {{{ proto mixed mysqli_fetch_all (object result [,int resulttype]) Fetches all result rows as an associative array, a numeric array, or both */ #if defined(MYSQLI_USE_MYSQLND) @@ -367,15 +360,15 @@ PHP_FUNCTION(mysqli_fetch_all) { MYSQL_RES *result; zval *mysql_result; - long mode = MYSQLND_FETCH_NUM; + zend_long mode = MYSQLND_FETCH_NUM; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|l", &mysql_result, mysqli_result_class_entry, &mode) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|l", &mysql_result, mysqli_result_class_entry, &mode) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); if (!mode || (mode & ~MYSQLND_FETCH_BOTH)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Mode can be only MYSQLI_FETCH_NUM, " + php_error_docref(NULL, E_WARNING, "Mode can be only MYSQLI_FETCH_NUM, " "MYSQLI_FETCH_ASSOC or MYSQLI_FETCH_BOTH"); RETURN_FALSE; } @@ -384,8 +377,6 @@ PHP_FUNCTION(mysqli_fetch_all) } /* }}} */ - - /* {{{ proto array mysqli_get_client_stats(void) Returns statistics about the zval cache */ PHP_FUNCTION(mysqli_get_client_stats) @@ -397,7 +388,6 @@ PHP_FUNCTION(mysqli_get_client_stats) } /* }}} */ - /* {{{ proto array mysqli_get_connection_stats(void) Returns statistics about the zval cache */ PHP_FUNCTION(mysqli_get_connection_stats) @@ -405,11 +395,11 @@ PHP_FUNCTION(mysqli_get_connection_stats) MY_MYSQL *mysql; zval *mysql_link; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); mysqlnd_get_connection_stats(mysql->mysql, return_value); } @@ -423,10 +413,10 @@ PHP_FUNCTION(mysqli_error_list) MY_MYSQL *mysql; zval *mysql_link; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); array_init(return_value); #if defined(MYSQLI_USE_MYSQLND) if (mysql->mysql->data->error_info->error_list) { @@ -434,32 +424,29 @@ PHP_FUNCTION(mysqli_error_list) zend_llist_position pos; for (message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_first_ex(mysql->mysql->data->error_info->error_list, &pos); message; - message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_next_ex(mysql->mysql->data->error_info->error_list, &pos)) + message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_next_ex(mysql->mysql->data->error_info->error_list, &pos)) { - zval * single_error; - MAKE_STD_ZVAL(single_error); - array_init(single_error); - add_assoc_long_ex(single_error, "errno", sizeof("errno"), message->error_no); - add_assoc_string_ex(single_error, "sqlstate", sizeof("sqlstate"), message->sqlstate, 1); - add_assoc_string_ex(single_error, "error", sizeof("error"), message->error, 1); - add_next_index_zval(return_value, single_error); + zval single_error; + array_init(&single_error); + add_assoc_long_ex(&single_error, "errno", sizeof("errno") - 1, message->error_no); + add_assoc_string_ex(&single_error, "sqlstate", sizeof("sqlstate") - 1, message->sqlstate); + add_assoc_string_ex(&single_error, "error", sizeof("error") - 1, message->error); + add_next_index_zval(return_value, &single_error); } } #else if (mysql_errno(mysql->mysql)) { - zval * single_error; - MAKE_STD_ZVAL(single_error); - array_init(single_error); - add_assoc_long_ex(single_error, "errno", sizeof("errno"), mysql_errno(mysql->mysql)); - add_assoc_string_ex(single_error, "sqlstate", sizeof("sqlstate"), mysql_sqlstate(mysql->mysql), 1); - add_assoc_string_ex(single_error, "error", sizeof("error"), mysql_error(mysql->mysql), 1); - add_next_index_zval(return_value, single_error); + zval single_error; + array_init(&single_error); + add_assoc_long_ex(&single_error, "errno", sizeof("errno") - 1, mysql_errno(mysql->mysql)); + add_assoc_string_ex(&single_error, "sqlstate", sizeof("sqlstate") - 1, mysql_sqlstate(mysql->mysql)); + add_assoc_string_ex(&single_error, "error", sizeof("error") - 1, mysql_error(mysql->mysql)); + add_next_index_zval(return_value, &single_error); } #endif } /* }}} */ - /* {{{ proto string mysqli_stmt_error_list(object stmt) */ PHP_FUNCTION(mysqli_stmt_error_list) @@ -467,10 +454,10 @@ PHP_FUNCTION(mysqli_stmt_error_list) MY_STMT *stmt; zval *mysql_stmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_INITIALIZED); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_INITIALIZED); array_init(return_value); #if defined(MYSQLI_USE_MYSQLND) if (stmt->stmt && stmt->stmt->data && stmt->stmt->data->error_info->error_list) { @@ -478,32 +465,29 @@ PHP_FUNCTION(mysqli_stmt_error_list) zend_llist_position pos; for (message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_first_ex(stmt->stmt->data->error_info->error_list, &pos); message; - message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_next_ex(stmt->stmt->data->error_info->error_list, &pos)) + message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_next_ex(stmt->stmt->data->error_info->error_list, &pos)) { - zval * single_error; - MAKE_STD_ZVAL(single_error); - array_init(single_error); - add_assoc_long_ex(single_error, "errno", sizeof("errno"), message->error_no); - add_assoc_string_ex(single_error, "sqlstate", sizeof("sqlstate"), message->sqlstate, 1); - add_assoc_string_ex(single_error, "error", sizeof("error"), message->error, 1); - add_next_index_zval(return_value, single_error); + zval single_error; + array_init(&single_error); + add_assoc_long_ex(&single_error, "errno", sizeof("errno") - 1, message->error_no); + add_assoc_string_ex(&single_error, "sqlstate", sizeof("sqlstate") - 1, message->sqlstate); + add_assoc_string_ex(&single_error, "error", sizeof("error") - 1, message->error); + add_next_index_zval(return_value, &single_error); } } #else if (mysql_stmt_errno(stmt->stmt)) { - zval * single_error; - MAKE_STD_ZVAL(single_error); - array_init(single_error); - add_assoc_long_ex(single_error, "errno", sizeof("errno"), mysql_stmt_errno(stmt->stmt)); - add_assoc_string_ex(single_error, "sqlstate", sizeof("sqlstate"), mysql_stmt_sqlstate(stmt->stmt), 1); - add_assoc_string_ex(single_error, "error", sizeof("error"), mysql_stmt_error(stmt->stmt), 1); - add_next_index_zval(return_value, single_error); + zval single_error; + array_init(&single_error); + add_assoc_long_ex(&single_error, "errno", sizeof("errno") - 1, mysql_stmt_errno(stmt->stmt)); + add_assoc_string_ex(&single_error, "sqlstate", sizeof("sqlstate") - 1, mysql_stmt_sqlstate(stmt->stmt)); + add_assoc_string_ex(&single_error, "error", sizeof("error") - 1, mysql_stmt_error(stmt->stmt)); + add_next_index_zval(return_value, &single_error); } #endif } /* }}} */ - /* {{{ proto mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]]) Fetch a result row as an object */ PHP_FUNCTION(mysqli_fetch_object) @@ -519,12 +503,12 @@ PHP_FUNCTION(mysqli_multi_query) MY_MYSQL *mysql; zval *mysql_link; char *query = NULL; - int query_len; + size_t query_len; - 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_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); MYSQLI_ENABLE_MQ; if (mysql_real_query(mysql->mysql, query, query_len)) { @@ -564,15 +548,15 @@ PHP_FUNCTION(mysqli_query) MYSQLI_RESOURCE *mysqli_resource; MYSQL_RES *result = NULL; char *query = NULL; - int query_len; - long resultmode = MYSQLI_STORE_RESULT; + size_t query_len; + zend_long resultmode = MYSQLI_STORE_RESULT; - 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_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os|l", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) { return; } if (!query_len) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty query"); + php_error_docref(NULL, E_WARNING, "Empty query"); RETURN_FALSE; } #ifdef MYSQLI_USE_MYSQLND @@ -580,11 +564,11 @@ PHP_FUNCTION(mysqli_query) #else if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) { #endif - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid value for resultmode"); + php_error_docref(NULL, E_WARNING, "Invalid value for resultmode"); RETURN_FALSE; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); MYSQLI_DISABLE_MQ; @@ -608,7 +592,7 @@ PHP_FUNCTION(mysqli_query) if (!mysql_field_count(mysql->mysql)) { /* no result set - not a SELECT */ if (MyG(report_mode) & MYSQLI_REPORT_INDEX) { - php_mysqli_report_index(query, mysqli_server_status(mysql->mysql) TSRMLS_CC); + php_mysqli_report_index(query, mysqli_server_status(mysql->mysql)); } RETURN_TRUE; } @@ -631,13 +615,13 @@ PHP_FUNCTION(mysqli_query) break; } if (!result) { - php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql) TSRMLS_CC, + php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql), "%s", mysql_error(mysql->mysql)); RETURN_FALSE; } if (MyG(report_mode) & MYSQLI_REPORT_INDEX) { - php_mysqli_report_index(query, mysqli_server_status(mysql->mysql) TSRMLS_CC); + php_mysqli_report_index(query, mysqli_server_status(mysql->mysql)); } mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); @@ -647,77 +631,70 @@ PHP_FUNCTION(mysqli_query) } /* }}} */ - #if defined(MYSQLI_USE_MYSQLND) #include "php_network.h" /* {{{ mysqlnd_zval_array_to_mysqlnd_array functions */ -static int mysqlnd_zval_array_to_mysqlnd_array(zval *in_array, MYSQLND ***out_array TSRMLS_DC) +static int mysqlnd_zval_array_to_mysqlnd_array(zval *in_array, MYSQLND ***out_array) { - zval **elem; + zval *elem; int i = 0, current = 0; if (Z_TYPE_P(in_array) != IS_ARRAY) { return 0; } *out_array = ecalloc(zend_hash_num_elements(Z_ARRVAL_P(in_array)) + 1, sizeof(MYSQLND *)); - for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(in_array)); - zend_hash_get_current_data(Z_ARRVAL_P(in_array), (void **) &elem) == SUCCESS; - zend_hash_move_forward(Z_ARRVAL_P(in_array))) { + ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(in_array), elem) { i++; - if (Z_TYPE_PP(elem) != IS_OBJECT || - !instanceof_function(Z_OBJCE_PP(elem), mysqli_link_class_entry TSRMLS_CC)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parameter %d not a mysqli object", i); + if (Z_TYPE_P(elem) != IS_OBJECT || + !instanceof_function(Z_OBJCE_P(elem), mysqli_link_class_entry)) { + php_error_docref(NULL, E_WARNING, "Parameter %d not a mysqli object", i); } else { MY_MYSQL *mysql; MYSQLI_RESOURCE *my_res; - mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*elem TSRMLS_CC); + mysqli_object *intern = Z_MYSQLI_P(elem); if (!(my_res = (MYSQLI_RESOURCE *)intern->ptr)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "[%d] Couldn't fetch %s", i, intern->zo.ce->name); + php_error_docref(NULL, E_WARNING, "[%d] Couldn't fetch %s", i, intern->zo.ce->name->val); continue; } mysql = (MY_MYSQL*) my_res->ptr; if (MYSQLI_STATUS_VALID && my_res->status < MYSQLI_STATUS_VALID) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid object %d or resource %s", i, intern->zo.ce->name); + php_error_docref(NULL, E_WARNING, "Invalid object %d or resource %s", i, intern->zo.ce->name->val); continue; } (*out_array)[current++] = mysql->mysql; } - } + } ZEND_HASH_FOREACH_END(); return 0; } /* }}} */ - /* {{{ mysqlnd_zval_array_from_mysqlnd_array */ -static int mysqlnd_zval_array_from_mysqlnd_array(MYSQLND **in_array, zval *out_array TSRMLS_DC) +static int mysqlnd_zval_array_from_mysqlnd_array(MYSQLND **in_array, zval *out_array) { MYSQLND **p = in_array; - HashTable *new_hash; - zval **elem, **dest_elem; + zval dest_array; + zval *elem, *dest_elem; int ret = 0, i = 0; - ALLOC_HASHTABLE(new_hash); - zend_hash_init(new_hash, zend_hash_num_elements(Z_ARRVAL_P(out_array)), NULL, ZVAL_PTR_DTOR, 0); + array_init_size(&dest_array, zend_hash_num_elements(Z_ARRVAL_P(out_array))); - for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(out_array)); - zend_hash_get_current_data(Z_ARRVAL_P(out_array), (void **) &elem) == SUCCESS; - zend_hash_move_forward(Z_ARRVAL_P(out_array))) - { + ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(out_array), elem) { i++; - if (Z_TYPE_PP(elem) != IS_OBJECT || !instanceof_function(Z_OBJCE_PP(elem), mysqli_link_class_entry TSRMLS_CC)) { + if (Z_TYPE_P(elem) != IS_OBJECT || + !instanceof_function(Z_OBJCE_P(elem), mysqli_link_class_entry)) { continue; } { MY_MYSQL *mysql; MYSQLI_RESOURCE *my_res; - mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*elem TSRMLS_CC); + mysqli_object *intern = Z_MYSQLI_P(elem); if (!(my_res = (MYSQLI_RESOURCE *)intern->ptr)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "[%d] Couldn't fetch %s", i, intern->zo.ce->name); + php_error_docref(NULL, E_WARNING, "[%d] Couldn't fetch %s", i, intern->zo.ce->name->val); continue; } mysql = (MY_MYSQL *) my_res->ptr; if (mysql->mysql == *p) { - zend_hash_next_index_insert(new_hash, (void *)elem, sizeof(zval *), (void **)&dest_elem); + dest_elem = zend_hash_next_index_insert(Z_ARRVAL(dest_array), elem); if (dest_elem) { zval_add_ref(dest_elem); } @@ -725,100 +702,87 @@ static int mysqlnd_zval_array_from_mysqlnd_array(MYSQLND **in_array, zval *out_a p++; } } - } + } ZEND_HASH_FOREACH_END(); /* destroy old array and add new one */ - zend_hash_destroy(Z_ARRVAL_P(out_array)); - efree(Z_ARRVAL_P(out_array)); - - zend_hash_internal_pointer_reset(new_hash); - Z_ARRVAL_P(out_array) = new_hash; + zval_ptr_dtor(out_array); + ZVAL_COPY_VALUE(out_array, &dest_array); return 0; } /* }}} */ - /* {{{ mysqlnd_dont_poll_zval_array_from_mysqlnd_array */ -static int mysqlnd_dont_poll_zval_array_from_mysqlnd_array(MYSQLND **in_array, zval *in_zval_array, zval *out_array TSRMLS_DC) +static int mysqlnd_dont_poll_zval_array_from_mysqlnd_array(MYSQLND **in_array, zval *in_zval_array, zval *out_array) { MYSQLND **p = in_array; - HashTable *new_hash; - zval **elem, **dest_elem; + zval proxy, *elem, *dest_elem; int ret = 0; - ALLOC_HASHTABLE(new_hash); - zend_hash_init(new_hash, in_zval_array? zend_hash_num_elements(Z_ARRVAL_P(in_zval_array)):0, NULL, ZVAL_PTR_DTOR, 0); + array_init(&proxy); if (in_array) { - for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(in_zval_array)); - zend_hash_get_current_data(Z_ARRVAL_P(in_zval_array), (void **) &elem) == SUCCESS; - zend_hash_move_forward(Z_ARRVAL_P(in_zval_array))) - { + ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(in_zval_array), elem) { MY_MYSQL *mysql; - mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*elem TSRMLS_CC); - mysql = (MY_MYSQL *) ((MYSQLI_RESOURCE *)intern->ptr)->ptr; + mysqli_object *intern = Z_MYSQLI_P(elem); + mysql = (MY_MYSQL *)((MYSQLI_RESOURCE *)intern->ptr)->ptr; if (mysql->mysql == *p) { - zend_hash_next_index_insert(new_hash, (void *)elem, sizeof(zval *), (void **)&dest_elem); + dest_elem = zend_hash_next_index_insert(Z_ARRVAL(proxy), elem); if (dest_elem) { zval_add_ref(dest_elem); } ret++; p++; } - } + } ZEND_HASH_FOREACH_END(); } /* destroy old array and add new one */ - zend_hash_destroy(Z_ARRVAL_P(out_array)); - efree(Z_ARRVAL_P(out_array)); - - zend_hash_internal_pointer_reset(new_hash); - Z_ARRVAL_P(out_array) = new_hash; + zval_ptr_dtor(out_array); + ZVAL_COPY_VALUE(out_array, &proxy); return 0; } /* }}} */ - /* {{{ proto int mysqli_poll(array read, array write, array error, long sec [, long usec]) U Poll connections */ PHP_FUNCTION(mysqli_poll) { zval *r_array, *e_array, *dont_poll_array; MYSQLND **new_r_array = NULL, **new_e_array = NULL, **new_dont_poll_array = NULL; - long sec = 0, usec = 0; + zend_long sec = 0, usec = 0; enum_func_status ret; int desc_num; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a!a!al|l", &r_array, &e_array, &dont_poll_array, &sec, &usec) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "a!a!al|l", &r_array, &e_array, &dont_poll_array, &sec, &usec) == FAILURE) { return; } if (sec < 0 || usec < 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Negative values passed for sec and/or usec"); + php_error_docref(NULL, E_WARNING, "Negative values passed for sec and/or usec"); RETURN_FALSE; } if (!r_array && !e_array) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "No stream arrays were passed"); + php_error_docref(NULL, E_WARNING, "No stream arrays were passed"); RETURN_FALSE; } if (r_array != NULL) { - mysqlnd_zval_array_to_mysqlnd_array(r_array, &new_r_array TSRMLS_CC); + mysqlnd_zval_array_to_mysqlnd_array(r_array, &new_r_array); } if (e_array != NULL) { - mysqlnd_zval_array_to_mysqlnd_array(e_array, &new_e_array TSRMLS_CC); + mysqlnd_zval_array_to_mysqlnd_array(e_array, &new_e_array); } ret = mysqlnd_poll(new_r_array, new_e_array, &new_dont_poll_array, sec, usec, &desc_num); - mysqlnd_dont_poll_zval_array_from_mysqlnd_array(r_array != NULL ? new_dont_poll_array:NULL, r_array, dont_poll_array TSRMLS_CC); + mysqlnd_dont_poll_zval_array_from_mysqlnd_array(r_array != NULL ? new_dont_poll_array:NULL, r_array, dont_poll_array); if (r_array != NULL) { - mysqlnd_zval_array_from_mysqlnd_array(new_r_array, r_array TSRMLS_CC); + mysqlnd_zval_array_from_mysqlnd_array(new_r_array, r_array); } if (e_array != NULL) { - mysqlnd_zval_array_from_mysqlnd_array(new_e_array, e_array TSRMLS_CC); + mysqlnd_zval_array_from_mysqlnd_array(new_e_array, e_array); } if (new_dont_poll_array) { @@ -838,7 +802,6 @@ PHP_FUNCTION(mysqli_poll) } /* }}} */ - /* {{{ proto int mysqli_reap_async_query(object link) U Poll connections */ PHP_FUNCTION(mysqli_reap_async_query) @@ -848,11 +811,11 @@ PHP_FUNCTION(mysqli_reap_async_query) MYSQLI_RESOURCE *mysqli_resource; MYSQL_RES *result = NULL; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); if (FAIL == mysqlnd_reap_async_query(mysql->mysql)) { RETURN_FALSE; @@ -861,7 +824,7 @@ PHP_FUNCTION(mysqli_reap_async_query) if (!mysql_field_count(mysql->mysql)) { /* no result set - not a SELECT */ if (MyG(report_mode) & MYSQLI_REPORT_INDEX) { -/* php_mysqli_report_index("n/a", mysqli_server_status(mysql->mysql) TSRMLS_CC); */ +/* php_mysqli_report_index("n/a", mysqli_server_status(mysql->mysql)); */ } RETURN_TRUE; } @@ -876,13 +839,13 @@ PHP_FUNCTION(mysqli_reap_async_query) } if (!result) { - php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql) TSRMLS_CC, + php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql), "%s", mysql_error(mysql->mysql)); RETURN_FALSE; } if (MyG(report_mode) & MYSQLI_REPORT_INDEX) { -/* php_mysqli_report_index("n/a", mysqli_server_status(mysql->mysql) TSRMLS_CC); */ +/* php_mysqli_report_index("n/a", mysqli_server_status(mysql->mysql)); */ } mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); @@ -892,7 +855,6 @@ PHP_FUNCTION(mysqli_reap_async_query) } /* }}} */ - /* {{{ proto object mysqli_stmt_get_result(object link) U Buffer result set on client */ PHP_FUNCTION(mysqli_stmt_get_result) @@ -902,10 +864,10 @@ PHP_FUNCTION(mysqli_stmt_get_result) MY_STMT *stmt; zval *mysql_stmt; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID); if (!(result = mysqlnd_stmt_get_result(stmt->stmt))) { MYSQLI_REPORT_STMT_ERROR(stmt->stmt); @@ -920,7 +882,6 @@ PHP_FUNCTION(mysqli_stmt_get_result) /* }}} */ #endif - /* {{{ proto object mysqli_get_warnings(object link) */ PHP_FUNCTION(mysqli_get_warnings) { @@ -929,16 +890,16 @@ PHP_FUNCTION(mysqli_get_warnings) MYSQLI_RESOURCE *mysqli_resource; MYSQLI_WARNING *w; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); if (mysql_warning_count(mysql->mysql)) { #ifdef MYSQLI_USE_MYSQLND - w = php_get_warnings(mysql->mysql->data TSRMLS_CC); + w = php_get_warnings(mysql->mysql->data); #else - w = php_get_warnings(mysql->mysql TSRMLS_CC); + w = php_get_warnings(mysql->mysql); #endif } else { RETURN_FALSE; @@ -950,7 +911,6 @@ PHP_FUNCTION(mysqli_get_warnings) } /* }}} */ - /* {{{ proto object mysqli_stmt_get_warnings(object link) */ PHP_FUNCTION(mysqli_stmt_get_warnings) { @@ -959,13 +919,13 @@ PHP_FUNCTION(mysqli_stmt_get_warnings) MYSQLI_RESOURCE *mysqli_resource; MYSQLI_WARNING *w; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &stmt_link, mysqli_stmt_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &stmt_link, mysqli_stmt_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_STMT(stmt, &stmt_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, stmt_link, MYSQLI_STATUS_VALID); if (mysqli_stmt_warning_count(stmt->stmt)) { - w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC); + w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt)); } else { RETURN_FALSE; } @@ -976,7 +936,6 @@ PHP_FUNCTION(mysqli_stmt_get_warnings) } /* }}} */ - #ifdef HAVE_MYSQLI_SET_CHARSET /* {{{ proto bool mysqli_set_charset(object link, string csname) sets client character set */ @@ -985,12 +944,12 @@ PHP_FUNCTION(mysqli_set_charset) MY_MYSQL *mysql; zval *mysql_link; char *cs_name; - int csname_len; + size_t csname_len; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &cs_name, &csname_len) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &mysql_link, mysqli_link_class_entry, &cs_name, &csname_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); if (mysql_set_character_set(mysql->mysql, cs_name)) { RETURN_FALSE; @@ -1015,10 +974,10 @@ PHP_FUNCTION(mysqli_get_charset) const MYSQLND_CHARSET *cs; #endif - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); #if !defined(MYSQLI_USE_MYSQLND) @@ -1034,7 +993,7 @@ PHP_FUNCTION(mysqli_get_charset) #else cs = mysql->mysql->data->charset; if (!cs) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "The connection has no charset associated"); + php_error_docref(NULL, E_WARNING, "The connection has no charset associated"); RETURN_NULL(); } name = cs->name; @@ -1047,44 +1006,44 @@ PHP_FUNCTION(mysqli_get_charset) #endif object_init(return_value); - add_property_string(return_value, "charset", (name) ? (char *)name : "", 1); - add_property_string(return_value, "collation",(collation) ? (char *)collation : "", 1); - add_property_string(return_value, "dir", (dir) ? (char *)dir : "", 1); + add_property_string(return_value, "charset", (name) ? (char *)name : ""); + add_property_string(return_value, "collation",(collation) ? (char *)collation : ""); + add_property_string(return_value, "dir", (dir) ? (char *)dir : ""); add_property_long(return_value, "min_length", minlength); add_property_long(return_value, "max_length", maxlength); add_property_long(return_value, "number", number); add_property_long(return_value, "state", state); - add_property_string(return_value, "comment", (comment) ? (char *)comment : "", 1); + add_property_string(return_value, "comment", (comment) ? (char *)comment : ""); } /* }}} */ #endif #if !defined(MYSQLI_USE_MYSQLND) -extern char * mysqli_escape_string_for_tx_name_in_comment(const char * const name TSRMLS_DC); +extern char * mysqli_escape_string_for_tx_name_in_comment(const char * const name); /* {{{ proto bool mysqli_begin_transaction_libmysql */ -static int mysqli_begin_transaction_libmysql(MYSQL * conn, const unsigned int mode, const char * const name TSRMLS_DC) +static int mysqli_begin_transaction_libmysql(MYSQL * conn, const unsigned int mode, const char * const name) { int ret; zend_bool err = FALSE; - smart_str tmp_str = {0, 0, 0}; + smart_str tmp_str = {0}; if (mode & TRANS_START_WITH_CONSISTENT_SNAPSHOT) { - if (tmp_str.len) { + if (tmp_str.s) { smart_str_appendl(&tmp_str, ", ", sizeof(", ") - 1); } smart_str_appendl(&tmp_str, "WITH CONSISTENT SNAPSHOT", sizeof("WITH CONSISTENT SNAPSHOT") - 1); } if (mode & (TRANS_START_READ_WRITE | TRANS_START_READ_ONLY)) { if (mysql_get_server_version(conn) < 50605L) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required"); + php_error_docref(NULL, E_WARNING, "This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required"); err = TRUE; } else if (mode & TRANS_START_READ_WRITE) { - if (tmp_str.len) { + if (tmp_str.s) { smart_str_appendl(&tmp_str, ", ", sizeof(", ") - 1); } smart_str_appendl(&tmp_str, "READ WRITE", sizeof("READ WRITE") - 1); } else if (mode & TRANS_START_READ_ONLY) { - if (tmp_str.len) { + if (tmp_str.s) { smart_str_appendl(&tmp_str, ", ", sizeof(", ") - 1); } smart_str_appendl(&tmp_str, "READ ONLY", sizeof("READ ONLY") - 1); @@ -1093,10 +1052,10 @@ static int mysqli_begin_transaction_libmysql(MYSQL * conn, const unsigned int mo smart_str_0(&tmp_str); if (err == FALSE){ - char * name_esc = mysqli_escape_string_for_tx_name_in_comment(name TSRMLS_CC); + char * name_esc = mysqli_escape_string_for_tx_name_in_comment(name); char * query; unsigned int query_len = spprintf(&query, 0, "START TRANSACTION%s %s", - name_esc? name_esc:"", tmp_str.c? tmp_str.c:""); + name_esc? name_esc:"", tmp_str.s? tmp_str.s->val:""); smart_str_free(&tmp_str); if (name_esc) { @@ -1117,29 +1076,29 @@ PHP_FUNCTION(mysqli_begin_transaction) { MY_MYSQL *mysql; zval *mysql_link; - long flags = TRANS_START_NO_OPT; + zend_long flags = TRANS_START_NO_OPT; char * name = NULL; - int name_len = -1; + size_t name_len = -1; zend_bool err = FALSE; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|ls", &mysql_link, mysqli_link_class_entry, &flags, &name, &name_len) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|ls", &mysql_link, mysqli_link_class_entry, &flags, &name, &name_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); if (flags < 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid value for parameter flags (%ld)", flags); + php_error_docref(NULL, E_WARNING, "Invalid value for parameter flags (%pd)", flags); err = TRUE; } if (!name_len) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Savepoint name cannot be empty"); + php_error_docref(NULL, E_WARNING, "Savepoint name cannot be empty"); err = TRUE; } if (TRUE == err) { - RETURN_FALSE; + RETURN_FALSE; } - + #if !defined(MYSQLI_USE_MYSQLND) - if (mysqli_begin_transaction_libmysql(mysql->mysql, flags, name TSRMLS_CC)) { + if (mysqli_begin_transaction_libmysql(mysql->mysql, flags, name)) { RETURN_FALSE; } #else @@ -1151,7 +1110,6 @@ PHP_FUNCTION(mysqli_begin_transaction) } /* }}} */ - #if !defined(MYSQLI_USE_MYSQLND) /* {{{ proto bool mysqli_savepoint_libmysql */ static int mysqli_savepoint_libmysql(MYSQL * conn, const char * const name, zend_bool release) @@ -1166,7 +1124,6 @@ static int mysqli_savepoint_libmysql(MYSQL * conn, const char * const name, zend /* }}} */ #endif - /* {{{ proto bool mysqli_savepoint(object link, string name) Starts a transaction */ PHP_FUNCTION(mysqli_savepoint) @@ -1174,15 +1131,15 @@ PHP_FUNCTION(mysqli_savepoint) MY_MYSQL *mysql; zval *mysql_link; char * name = NULL; - int name_len = -1; + size_t name_len = -1; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &name, &name_len) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &mysql_link, mysqli_link_class_entry, &name, &name_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); if (!name || !name_len) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Savepoint name cannot be empty"); - RETURN_FALSE; + php_error_docref(NULL, E_WARNING, "Savepoint name cannot be empty"); + RETURN_FALSE; } #if !defined(MYSQLI_USE_MYSQLND) @@ -1196,7 +1153,6 @@ PHP_FUNCTION(mysqli_savepoint) } /* }}} */ - /* {{{ proto bool mysqli_release_savepoint(object link, string name) Starts a transaction */ PHP_FUNCTION(mysqli_release_savepoint) @@ -1204,14 +1160,14 @@ PHP_FUNCTION(mysqli_release_savepoint) MY_MYSQL *mysql; zval *mysql_link; char * name = NULL; - int name_len = -1; + size_t name_len = -1; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &name, &name_len) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &mysql_link, mysqli_link_class_entry, &name, &name_len) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); if (!name || !name_len) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Savepoint name cannot be empty"); + php_error_docref(NULL, E_WARNING, "Savepoint name cannot be empty"); RETURN_FALSE; } #if !defined(MYSQLI_USE_MYSQLND) @@ -1225,24 +1181,22 @@ PHP_FUNCTION(mysqli_release_savepoint) } /* }}} */ - /* {{{ proto bool mysqli_get_links_stats() Returns information about open and cached links */ PHP_FUNCTION(mysqli_get_links_stats) { if (ZEND_NUM_ARGS()) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "no parameters expected"); - return; + php_error_docref(NULL, E_WARNING, "no parameters expected"); + return; } array_init(return_value); - add_assoc_long_ex(return_value, "total", sizeof("total"), MyG(num_links)); - add_assoc_long_ex(return_value, "active_plinks", sizeof("active_plinks"), MyG(num_active_persistent)); - add_assoc_long_ex(return_value, "cached_plinks", sizeof("cached_plinks"), MyG(num_inactive_persistent)); + add_assoc_long_ex(return_value, "total", sizeof("total") - 1, MyG(num_links)); + add_assoc_long_ex(return_value, "active_plinks", sizeof("active_plinks") - 1, MyG(num_active_persistent)); + add_assoc_long_ex(return_value, "cached_plinks", sizeof("cached_plinks") - 1, MyG(num_inactive_persistent)); } /* }}} */ - /* * Local variables: * tab-width: 4 diff --git a/ext/mysqli/mysqli_priv.h b/ext/mysqli/mysqli_priv.h index 18295f3da1..aa8b14a7cd 100644 --- a/ext/mysqli/mysqli_priv.h +++ b/ext/mysqli/mysqli_priv.h @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2015 The PHP Group | +----------------------------------------------------------------------+ @@ -61,22 +61,22 @@ extern const zend_property_info mysqli_warning_property_info_entries[]; extern int php_le_pmysqli(void); extern void php_mysqli_dtor_p_elements(void *data); -extern void php_mysqli_close(MY_MYSQL * mysql, int close_type, int resource_status TSRMLS_DC); +extern void php_mysqli_close(MY_MYSQL * mysql, int close_type, int resource_status); extern void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flag, int into_object); -extern void php_clear_stmt_bind(MY_STMT *stmt TSRMLS_DC); +extern void php_clear_stmt_bind(MY_STMT *stmt); extern void php_clear_mysql(MY_MYSQL *); #ifdef MYSQLI_USE_MYSQLND -extern MYSQLI_WARNING *php_get_warnings(MYSQLND_CONN_DATA * mysql TSRMLS_DC); +extern MYSQLI_WARNING *php_get_warnings(MYSQLND_CONN_DATA * mysql); #else -extern MYSQLI_WARNING *php_get_warnings(MYSQL * mysql TSRMLS_DC); +extern MYSQLI_WARNING *php_get_warnings(MYSQL * mysql); #endif extern void php_clear_warnings(MYSQLI_WARNING *w); extern void php_free_stmt_bind_buffer(BIND_BUFFER bbuf, int type); -extern void php_mysqli_report_error(const char *sqlstate, int errorno, const char *error TSRMLS_DC); -extern void php_mysqli_report_index(const char *query, unsigned int status TSRMLS_DC); -extern void php_mysqli_throw_sql_exception(char *sqlstate, int errorno TSRMLS_DC, char *format, ...); +extern void php_mysqli_report_error(const char *sqlstate, int errorno, const char *error); +extern void php_mysqli_report_index(const char *query, unsigned int status); +extern void php_mysqli_throw_sql_exception(char *sqlstate, int errorno, char *format, ...); #ifdef HAVE_SPL extern PHPAPI zend_class_entry *spl_ce_RuntimeException; @@ -84,8 +84,7 @@ extern PHPAPI zend_class_entry *spl_ce_RuntimeException; #define PHP_MYSQLI_EXPORT(__type) PHP_MYSQLI_API __type -PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRMLS_DC); - +PHP_MYSQLI_EXPORT(zend_object *) mysqli_objects_new(zend_class_entry *); #define MYSQLI_DISABLE_MQ if (mysql->multi_query) { \ mysql_set_server_option(mysql->mysql, MYSQL_OPTION_MULTI_STATEMENTS_OFF); \ @@ -97,17 +96,14 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRML mysql->multi_query = 1; \ } - -#define MYSQLI_RETURN_LONG_LONG(__val) \ +#define MYSQLI_RETURN_LONG_INT(__val) \ { \ - if ((__val) < LONG_MAX) { \ - RETURN_LONG((long) (__val)); \ + if ((__val) < ZEND_LONG_MAX) { \ + RETURN_LONG((zend_long) (__val)); \ } else { \ - char *ret; \ /* always used with my_ulonglong -> %llu */ \ - int l = spprintf(&ret, 0, MYSQLI_LLU_SPEC, (__val)); \ - RETURN_STRINGL(ret, l, 0); \ - } \ + RETURN_STR(strpprintf(0, MYSQLI_LLU_SPEC, (__val))); \ + } \ } #define MYSQLI_STORE_RESULT 0 @@ -140,12 +136,12 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRML #define MYSQLI_REPORT_MYSQL_ERROR(mysql) \ if ((MyG(report_mode) & MYSQLI_REPORT_ERROR) && mysql_errno(mysql)) { \ - php_mysqli_report_error(mysql_sqlstate(mysql), mysql_errno(mysql), mysql_error(mysql) TSRMLS_CC); \ + php_mysqli_report_error(mysql_sqlstate(mysql), mysql_errno(mysql), mysql_error(mysql)); \ } #define MYSQLI_REPORT_STMT_ERROR(stmt) \ if ((MyG(report_mode) & MYSQLI_REPORT_ERROR) && mysql_stmt_errno(stmt)) { \ - php_mysqli_report_error(mysql_stmt_sqlstate(stmt), mysql_stmt_errno(stmt), mysql_stmt_error(stmt) TSRMLS_CC); \ + php_mysqli_report_error(mysql_stmt_sqlstate(stmt), mysql_stmt_errno(stmt), mysql_stmt_error(stmt)); \ } void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_connect, zend_bool in_ctor); diff --git a/ext/mysqli/mysqli_prop.c b/ext/mysqli/mysqli_prop.c index 7d77fd9bff..95ef07cb0a 100644 --- a/ext/mysqli/mysqli_prop.c +++ b/ext/mysqli/mysqli_prop.c @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2015 The PHP Group | +----------------------------------------------------------------------+ @@ -33,18 +33,17 @@ #define CHECK_STATUS(value) \ if (!obj->ptr || ((MYSQLI_RESOURCE *)obj->ptr)->status < value ) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Property access is not allowed yet"); \ - ZVAL_NULL(*retval); \ - return SUCCESS; \ + php_error_docref(NULL, E_WARNING, "Property access is not allowed yet"); \ + ZVAL_NULL(retval); \ + return retval; \ } \ #define MYSQLI_GET_MYSQL(statusval) \ MYSQL *p; \ -MAKE_STD_ZVAL(*retval);\ if (!obj->ptr || !(MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", obj->zo.ce->name);\ - ZVAL_NULL(*retval);\ - return SUCCESS; \ + php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", obj->zo.ce->name->val);\ + ZVAL_NULL(retval);\ + return retval; \ } else { \ CHECK_STATUS(statusval);\ p = (MYSQL *)((MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->mysql;\ @@ -52,11 +51,10 @@ if (!obj->ptr || !(MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr) { \ #define MYSQLI_GET_RESULT(statusval) \ MYSQL_RES *p; \ -MAKE_STD_ZVAL(*retval);\ if (!obj->ptr) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", obj->zo.ce->name);\ - ZVAL_NULL(*retval);\ - return SUCCESS; \ + php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", obj->zo.ce->name->val);\ + ZVAL_NULL(retval);\ + return retval; \ } else { \ CHECK_STATUS(statusval);\ p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; \ @@ -65,144 +63,130 @@ if (!obj->ptr) { \ #define MYSQLI_GET_STMT(statusval) \ MYSQL_STMT *p; \ -MAKE_STD_ZVAL(*retval);\ if (!obj->ptr) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", obj->zo.ce->name);\ - ZVAL_NULL(*retval);\ - return SUCCESS; \ + php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", obj->zo.ce->name->val);\ + ZVAL_NULL(retval);\ + return retval; \ } else { \ CHECK_STATUS(statusval);\ p = (MYSQL_STMT *)((MY_STMT *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->stmt;\ } #define MYSQLI_MAP_PROPERTY_FUNC_LONG( __func, __int_func, __get_type, __ret_type, __ret_type_sprint_mod)\ -static int __func(mysqli_object *obj, zval **retval TSRMLS_DC) \ +static zval *__func(mysqli_object *obj, zval *retval) \ {\ __ret_type l;\ __get_type;\ if (!p) {\ - ZVAL_NULL(*retval);\ + ZVAL_NULL(retval);\ } else {\ l = (__ret_type)__int_func(p);\ - if (l < LONG_MAX) {\ - ZVAL_LONG(*retval, (long) l);\ + if (l < ZEND_LONG_MAX) {\ + ZVAL_LONG(retval, (zend_long) l);\ } else { \ - char *ret; \ - int ret_len = spprintf(&ret, 0, __ret_type_sprint_mod, l); \ - ZVAL_STRINGL(*retval, ret, ret_len, 0); \ + ZVAL_NEW_STR(retval, strpprintf(0, __ret_type_sprint_mod, l)); \ } \ }\ - return SUCCESS;\ + return retval;\ } #define MYSQLI_MAP_PROPERTY_FUNC_STRING(__func, __int_func, __get_type)\ -static int __func(mysqli_object *obj, zval **retval TSRMLS_DC)\ +static zval *__func(mysqli_object *obj, zval *retval)\ {\ char *c;\ __get_type;\ if (!p) {\ - ZVAL_NULL(*retval);\ + ZVAL_NULL(retval);\ } else {\ c = (char *)__int_func(p);\ if (!c) {\ - ZVAL_NULL(*retval);\ + ZVAL_NULL(retval);\ } else {\ - ZVAL_STRING(*retval, c, 1);\ + ZVAL_STRING(retval, c);\ }\ }\ - return SUCCESS;\ + return retval; \ } /* {{{ property link_client_version_read */ -static int link_client_version_read(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *link_client_version_read(mysqli_object *obj, zval *retval) { - MAKE_STD_ZVAL(*retval); - ZVAL_LONG(*retval, MYSQL_VERSION_ID); - return SUCCESS; + ZVAL_LONG(retval, MYSQL_VERSION_ID); + return retval; } /* }}} */ /* {{{ property link_client_info_read */ -static int link_client_info_read(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *link_client_info_read(mysqli_object *obj, zval *retval) { - MAKE_STD_ZVAL(*retval); CHECK_STATUS(MYSQLI_STATUS_INITIALIZED); - ZVAL_STRING(*retval, MYSQL_SERVER_VERSION, 1); - return SUCCESS; + ZVAL_STRING(retval, MYSQL_SERVER_VERSION); + return retval; } /* }}} */ /* {{{ property link_connect_errno_read */ -static int link_connect_errno_read(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *link_connect_errno_read(mysqli_object *obj, zval *retval) { - MAKE_STD_ZVAL(*retval); - ZVAL_LONG(*retval, (long)MyG(error_no)); - return SUCCESS; + ZVAL_LONG(retval, (zend_long)MyG(error_no)); + return retval; } /* }}} */ /* {{{ property link_connect_error_read */ -static int link_connect_error_read(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *link_connect_error_read(mysqli_object *obj, zval *retval) { - MAKE_STD_ZVAL(*retval); if (MyG(error_msg)) { - ZVAL_STRING(*retval, MyG(error_msg), 1); + ZVAL_STRING(retval, MyG(error_msg)); } else { - ZVAL_NULL(*retval); + ZVAL_NULL(retval); } - return SUCCESS; + return retval; } /* }}} */ /* {{{ property link_affected_rows_read */ -static int link_affected_rows_read(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *link_affected_rows_read(mysqli_object *obj, zval *retval) { MY_MYSQL *mysql; my_ulonglong rc; - MAKE_STD_ZVAL(*retval); - CHECK_STATUS(MYSQLI_STATUS_INITIALIZED); mysql = (MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; if (!mysql) { - ZVAL_NULL(*retval); + ZVAL_NULL(retval); } else { CHECK_STATUS(MYSQLI_STATUS_VALID); rc = mysql_affected_rows(mysql->mysql); if (rc == (my_ulonglong) -1) { - ZVAL_LONG(*retval, -1); - return SUCCESS; + ZVAL_LONG(retval, -1); + return retval; } - if (rc < LONG_MAX) { - ZVAL_LONG(*retval, (long) rc); + if (rc < ZEND_LONG_MAX) { + ZVAL_LONG(retval, (zend_long) rc); } else { - char *ret; - int l = spprintf(&ret, 0, MYSQLI_LLU_SPEC, rc); - ZVAL_STRINGL(*retval, ret, l, 0); + ZVAL_NEW_STR(retval, strpprintf(0, MYSQLI_LLU_SPEC, rc)); } } - return SUCCESS; + return retval; } /* }}} */ - /* {{{ property link_error_list_read */ -static int link_error_list_read(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *link_error_list_read(mysqli_object *obj, zval *retval) { MY_MYSQL *mysql; - MAKE_STD_ZVAL(*retval); - CHECK_STATUS(MYSQLI_STATUS_VALID); mysql = (MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; - array_init(*retval); + array_init(retval); if (mysql) { #if defined(MYSQLI_USE_MYSQLND) if (mysql->mysql->data->error_info->error_list) { @@ -210,55 +194,52 @@ static int link_error_list_read(mysqli_object *obj, zval **retval TSRMLS_DC) zend_llist_position pos; for (message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_first_ex(mysql->mysql->data->error_info->error_list, &pos); message; - message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_next_ex(mysql->mysql->data->error_info->error_list, &pos)) + message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_next_ex(mysql->mysql->data->error_info->error_list, &pos)) { - zval * single_error; - MAKE_STD_ZVAL(single_error); - array_init(single_error); - add_assoc_long_ex(single_error, "errno", sizeof("errno"), message->error_no); - add_assoc_string_ex(single_error, "sqlstate", sizeof("sqlstate"), message->sqlstate, 1); - add_assoc_string_ex(single_error, "error", sizeof("error"), message->error, 1); - add_next_index_zval(*retval, single_error); + zval single_error; + array_init(&single_error); + add_assoc_long_ex(&single_error, "errno", sizeof("errno") - 1, message->error_no); + add_assoc_string_ex(&single_error, "sqlstate", sizeof("sqlstate") - 1, message->sqlstate); + add_assoc_string_ex(&single_error, "error", sizeof("error") - 1, message->error); + add_next_index_zval(retval, &single_error); } } #else if (mysql_errno(mysql->mysql)) { - zval * single_error; - MAKE_STD_ZVAL(single_error); - array_init(single_error); - add_assoc_long_ex(single_error, "errno", sizeof("errno"), mysql_errno(mysql->mysql)); - add_assoc_string_ex(single_error, "sqlstate", sizeof("sqlstate"), mysql_sqlstate(mysql->mysql), 1); - add_assoc_string_ex(single_error, "error", sizeof("error"), mysql_error(mysql->mysql), 1); - add_next_index_zval(*retval, single_error); + zval single_error; + array_init(&single_error); + add_assoc_long_ex(&single_error, "errno", sizeof("errno") - 1, mysql_errno(mysql->mysql)); + add_assoc_string_ex(&single_error, "sqlstate", sizeof("sqlstate") - 1, mysql_sqlstate(mysql->mysql)); + add_assoc_string_ex(&single_error, "error", sizeof("error") - 1, mysql_error(mysql->mysql)); + add_next_index_zval(retval, &single_error); } #endif } - return SUCCESS; + + return retval; } /* }}} */ - /* link properties */ -MYSQLI_MAP_PROPERTY_FUNC_LONG(link_errno_read, mysql_errno, MYSQLI_GET_MYSQL(MYSQLI_STATUS_INITIALIZED), ulong, "%lu") +MYSQLI_MAP_PROPERTY_FUNC_LONG(link_errno_read, mysql_errno, MYSQLI_GET_MYSQL(MYSQLI_STATUS_INITIALIZED), zend_ulong, ZEND_ULONG_FMT) MYSQLI_MAP_PROPERTY_FUNC_STRING(link_error_read, mysql_error, MYSQLI_GET_MYSQL(MYSQLI_STATUS_INITIALIZED)) -MYSQLI_MAP_PROPERTY_FUNC_LONG(link_field_count_read, mysql_field_count, MYSQLI_GET_MYSQL(MYSQLI_STATUS_VALID), ulong, "%lu") +MYSQLI_MAP_PROPERTY_FUNC_LONG(link_field_count_read, mysql_field_count, MYSQLI_GET_MYSQL(MYSQLI_STATUS_VALID), zend_ulong, ZEND_ULONG_FMT) MYSQLI_MAP_PROPERTY_FUNC_STRING(link_host_info_read, mysql_get_host_info, MYSQLI_GET_MYSQL(MYSQLI_STATUS_VALID)) MYSQLI_MAP_PROPERTY_FUNC_STRING(link_info_read, mysql_info, MYSQLI_GET_MYSQL(MYSQLI_STATUS_VALID)) MYSQLI_MAP_PROPERTY_FUNC_LONG(link_insert_id_read, mysql_insert_id, MYSQLI_GET_MYSQL(MYSQLI_STATUS_VALID), my_ulonglong, MYSQLI_LLU_SPEC) -MYSQLI_MAP_PROPERTY_FUNC_LONG(link_protocol_version_read, mysql_get_proto_info, MYSQLI_GET_MYSQL(MYSQLI_STATUS_VALID), ulong, "%lu") +MYSQLI_MAP_PROPERTY_FUNC_LONG(link_protocol_version_read, mysql_get_proto_info, MYSQLI_GET_MYSQL(MYSQLI_STATUS_VALID), zend_ulong, ZEND_ULONG_FMT) MYSQLI_MAP_PROPERTY_FUNC_STRING(link_server_info_read, mysql_get_server_info, MYSQLI_GET_MYSQL(MYSQLI_STATUS_VALID)) -MYSQLI_MAP_PROPERTY_FUNC_LONG(link_server_version_read, mysql_get_server_version, MYSQLI_GET_MYSQL(MYSQLI_STATUS_VALID), ulong, "%lu") +MYSQLI_MAP_PROPERTY_FUNC_LONG(link_server_version_read, mysql_get_server_version, MYSQLI_GET_MYSQL(MYSQLI_STATUS_VALID), zend_ulong, ZEND_ULONG_FMT) MYSQLI_MAP_PROPERTY_FUNC_STRING(link_sqlstate_read, mysql_sqlstate, MYSQLI_GET_MYSQL(MYSQLI_STATUS_VALID)) -MYSQLI_MAP_PROPERTY_FUNC_LONG(link_thread_id_read, mysql_thread_id, MYSQLI_GET_MYSQL(MYSQLI_STATUS_VALID), ulong, "%lu") -MYSQLI_MAP_PROPERTY_FUNC_LONG(link_warning_count_read, mysql_warning_count, MYSQLI_GET_MYSQL(MYSQLI_STATUS_VALID), ulong, "%lu") +MYSQLI_MAP_PROPERTY_FUNC_LONG(link_thread_id_read, mysql_thread_id, MYSQLI_GET_MYSQL(MYSQLI_STATUS_VALID), zend_ulong, ZEND_ULONG_FMT) +MYSQLI_MAP_PROPERTY_FUNC_LONG(link_warning_count_read, mysql_warning_count, MYSQLI_GET_MYSQL(MYSQLI_STATUS_VALID), zend_ulong, ZEND_ULONG_FMT) /* {{{ property link_stat_read */ -static int link_stat_read(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *link_stat_read(mysqli_object *obj, zval *retval) { MY_MYSQL *mysql; - MAKE_STD_ZVAL(*retval); - ZVAL_NULL(*retval); + ZVAL_NULL(retval); #if defined(MYSQLI_USE_MYSQLND) CHECK_STATUS(MYSQLI_STATUS_INITIALIZED); @@ -269,139 +250,129 @@ static int link_stat_read(mysqli_object *obj, zval **retval TSRMLS_DC) mysql = (MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; if (mysql) { - char * stat_msg; #if defined(MYSQLI_USE_MYSQLND) - uint stat_msg_len; - if (mysqlnd_stat(mysql->mysql, &stat_msg, &stat_msg_len) == PASS) { - ZVAL_STRINGL(*retval, stat_msg, stat_msg_len, 0); + zend_string * stat_msg; + if (mysqlnd_stat(mysql->mysql, &stat_msg) == PASS) { + ZVAL_STR(retval, stat_msg); } #else - if ((stat_msg = (char *) mysql_stat(mysql->mysql))) { - ZVAL_STRING(*retval, stat_msg, 1); + char * stat_msg; + if ((stat_msg = (char *)mysql_stat(mysql->mysql))) { + ZVAL_STRING(retval, stat_msg); } #endif } - return SUCCESS; + return retval; } /* }}} */ - /* result properties */ /* {{{ property result_type_read */ -static int result_type_read(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *result_type_read(mysqli_object *obj, zval *retval) { MYSQL_RES *p; - MAKE_STD_ZVAL(*retval); CHECK_STATUS(MYSQLI_STATUS_VALID); p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; if (!p) { - ZVAL_NULL(*retval); + ZVAL_NULL(retval); } else { - ZVAL_LONG(*retval, mysqli_result_is_unbuffered(p) ? MYSQLI_USE_RESULT:MYSQLI_STORE_RESULT); + ZVAL_LONG(retval, mysqli_result_is_unbuffered(p) ? MYSQLI_USE_RESULT:MYSQLI_STORE_RESULT); } - return SUCCESS; + return retval; } /* }}} */ /* {{{ property result_lengths_read */ -static int result_lengths_read(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *result_lengths_read(mysqli_object *obj, zval *retval) { MYSQL_RES *p; - ulong *ret; + zend_ulong *ret; uint field_count; - MAKE_STD_ZVAL(*retval); - CHECK_STATUS(MYSQLI_STATUS_VALID); p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; field_count = mysql_num_fields(p); if (!p || !field_count || !(ret = mysql_fetch_lengths(p))) { - ZVAL_NULL(*retval); + ZVAL_NULL(retval); } else { - ulong i; + zend_ulong i; - array_init(*retval); + array_init(retval); for (i = 0; i < field_count; i++) { - add_index_long(*retval, i, ret[i]); + add_index_long(retval, i, ret[i]); } } - return SUCCESS; + return retval; } /* }}} */ - -MYSQLI_MAP_PROPERTY_FUNC_LONG(result_current_field_read, mysql_field_tell, MYSQLI_GET_RESULT(MYSQLI_STATUS_VALID), ulong, "%lu") -MYSQLI_MAP_PROPERTY_FUNC_LONG(result_field_count_read, mysql_num_fields, MYSQLI_GET_RESULT(MYSQLI_STATUS_VALID), ulong, "%lu") +MYSQLI_MAP_PROPERTY_FUNC_LONG(result_current_field_read, mysql_field_tell, MYSQLI_GET_RESULT(MYSQLI_STATUS_VALID), zend_ulong, ZEND_ULONG_FMT) +MYSQLI_MAP_PROPERTY_FUNC_LONG(result_field_count_read, mysql_num_fields, MYSQLI_GET_RESULT(MYSQLI_STATUS_VALID), zend_ulong, ZEND_ULONG_FMT) MYSQLI_MAP_PROPERTY_FUNC_LONG(result_num_rows_read, mysql_num_rows, MYSQLI_GET_RESULT(MYSQLI_STATUS_VALID), my_ulonglong, MYSQLI_LLU_SPEC) /* statement properties */ /* {{{ property stmt_id_read */ -static int stmt_id_read(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *stmt_id_read(mysqli_object *obj, zval *retval) { MY_STMT *p; - MAKE_STD_ZVAL(*retval); CHECK_STATUS(MYSQLI_STATUS_VALID); p = (MY_STMT*)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; if (!p) { - ZVAL_NULL(*retval); + ZVAL_NULL(retval); } else { - ZVAL_LONG(*retval, mysqli_stmt_get_id(p->stmt)); + ZVAL_LONG(retval, mysqli_stmt_get_id(p->stmt)); } - return SUCCESS; + return retval; } /* }}} */ /* {{{ property stmt_affected_rows_read */ -static int stmt_affected_rows_read(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *stmt_affected_rows_read(mysqli_object *obj, zval *retval) { MY_STMT *p; my_ulonglong rc; - MAKE_STD_ZVAL(*retval); CHECK_STATUS(MYSQLI_STATUS_VALID); p = (MY_STMT *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; if (!p) { - ZVAL_NULL(*retval); + ZVAL_NULL(retval); } else { rc = mysql_stmt_affected_rows(p->stmt); if (rc == (my_ulonglong) -1) { - ZVAL_LONG(*retval, -1); - return SUCCESS; + ZVAL_LONG(retval, -1); + return retval; } - if (rc < LONG_MAX) { - ZVAL_LONG(*retval, (long) rc); + if (rc < ZEND_LONG_MAX) { + ZVAL_LONG(retval, (zend_long) rc); } else { - char *ret; - int l = spprintf(&ret, 0, MYSQLI_LLU_SPEC, rc); - ZVAL_STRINGL(*retval, ret, l, 0); + ZVAL_NEW_STR(retval, strpprintf(0, MYSQLI_LLU_SPEC, rc)); } } - return SUCCESS; + return retval; } /* }}} */ /* {{{ property stmt_error_list_read */ -static int stmt_error_list_read(mysqli_object *obj, zval **retval TSRMLS_DC) +static zval *stmt_error_list_read(mysqli_object *obj, zval *retval) { MY_STMT * stmt; - MAKE_STD_ZVAL(*retval); CHECK_STATUS(MYSQLI_STATUS_INITIALIZED); stmt = (MY_STMT *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; - array_init(*retval); + array_init(retval); if (stmt && stmt->stmt) { #if defined(MYSQLI_USE_MYSQLND) if (stmt->stmt->data && stmt->stmt->data->error_info->error_list) { @@ -409,39 +380,36 @@ static int stmt_error_list_read(mysqli_object *obj, zval **retval TSRMLS_DC) zend_llist_position pos; for (message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_first_ex(stmt->stmt->data->error_info->error_list, &pos); message; - message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_next_ex(stmt->stmt->data->error_info->error_list, &pos)) + message = (MYSQLND_ERROR_LIST_ELEMENT *) zend_llist_get_next_ex(stmt->stmt->data->error_info->error_list, &pos)) { - zval * single_error; - MAKE_STD_ZVAL(single_error); - array_init(single_error); - add_assoc_long_ex(single_error, "errno", sizeof("errno"), message->error_no); - add_assoc_string_ex(single_error, "sqlstate", sizeof("sqlstate"), message->sqlstate, 1); - add_assoc_string_ex(single_error, "error", sizeof("error"), message->error, 1); - add_next_index_zval(*retval, single_error); + zval single_error; + array_init(&single_error); + add_assoc_long_ex(&single_error, "errno", sizeof("errno") - 1, message->error_no); + add_assoc_string_ex(&single_error, "sqlstate", sizeof("sqlstate") - 1, message->sqlstate); + add_assoc_string_ex(&single_error, "error", sizeof("error") - 1, message->error); + add_next_index_zval(retval, &single_error); } } #else if (mysql_stmt_errno(stmt->stmt)) { - zval * single_error; - MAKE_STD_ZVAL(single_error); - array_init(single_error); - add_assoc_long_ex(single_error, "errno", sizeof("errno"), mysql_stmt_errno(stmt->stmt)); - add_assoc_string_ex(single_error, "sqlstate", sizeof("sqlstate"), mysql_stmt_sqlstate(stmt->stmt), 1); - add_assoc_string_ex(single_error, "error", sizeof("error"), mysql_stmt_error(stmt->stmt), 1); - add_next_index_zval(*retval, single_error); + zval single_error; + array_init(&single_error); + add_assoc_long_ex(&single_error, "errno", sizeof("errno") - 1, mysql_stmt_errno(stmt->stmt)); + add_assoc_string_ex(&single_error, "sqlstate", sizeof("sqlstate") - 1, mysql_stmt_sqlstate(stmt->stmt)); + add_assoc_string_ex(&single_error, "error", sizeof("error") - 1, mysql_stmt_error(stmt->stmt)); + add_next_index_zval(retval, &single_error); } #endif } - return SUCCESS; + return retval; } /* }}} */ - MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_insert_id_read, mysql_stmt_insert_id, MYSQLI_GET_STMT(MYSQLI_STATUS_VALID), my_ulonglong, MYSQLI_LLU_SPEC) MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_num_rows_read, mysql_stmt_num_rows, MYSQLI_GET_STMT(MYSQLI_STATUS_VALID), my_ulonglong, MYSQLI_LLU_SPEC) -MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_param_count_read, mysql_stmt_param_count, MYSQLI_GET_STMT(MYSQLI_STATUS_VALID), ulong, "%lu") -MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_field_count_read, mysql_stmt_field_count, MYSQLI_GET_STMT(MYSQLI_STATUS_VALID), ulong, "%lu") -MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_errno_read, mysql_stmt_errno, MYSQLI_GET_STMT(MYSQLI_STATUS_INITIALIZED), ulong, "%lu") +MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_param_count_read, mysql_stmt_param_count, MYSQLI_GET_STMT(MYSQLI_STATUS_VALID), zend_ulong, ZEND_ULONG_FMT) +MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_field_count_read, mysql_stmt_field_count, MYSQLI_GET_STMT(MYSQLI_STATUS_VALID), zend_ulong, ZEND_ULONG_FMT) +MYSQLI_MAP_PROPERTY_FUNC_LONG(stmt_errno_read, mysql_stmt_errno, MYSQLI_GET_STMT(MYSQLI_STATUS_INITIALIZED), zend_ulong, ZEND_ULONG_FMT) MYSQLI_MAP_PROPERTY_FUNC_STRING(stmt_error_read, mysql_stmt_error, MYSQLI_GET_STMT(MYSQLI_STATUS_INITIALIZED)) MYSQLI_MAP_PROPERTY_FUNC_STRING(stmt_sqlstate_read, mysql_stmt_sqlstate, MYSQLI_GET_STMT(MYSQLI_STATUS_INITIALIZED)) @@ -470,30 +438,6 @@ const mysqli_property_entry mysqli_link_property_entries[] = { }; -const zend_property_info mysqli_link_property_info_entries[] = { - {ZEND_ACC_PUBLIC, "affected_rows", sizeof("affected_rows") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "client_info", sizeof("client_info") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "client_version", sizeof("client_version") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "connect_errno", sizeof("connect_errno") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "connect_error", sizeof("connect_error") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "errno", sizeof("errno") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "error", sizeof("error") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "error_list", sizeof("error_list") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "field_count", sizeof("field_count") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "host_info", sizeof("host_info") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "info", sizeof("info") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "insert_id", sizeof("insert_id") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "server_info", sizeof("server_info") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "server_version", sizeof("server_version") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "stat", sizeof("stat") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "sqlstate", sizeof("sqlstate") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "protocol_version", sizeof("protocol_version")-1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "thread_id", sizeof("thread_id") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "warning_count", sizeof("warning_count") - 1, -1, 0, NULL, 0, NULL}, - {0, NULL, 0, -1, 0, NULL, 0, NULL} -}; - - const mysqli_property_entry mysqli_result_property_entries[] = { {"current_field",sizeof("current_field")-1, result_current_field_read, NULL}, {"field_count", sizeof("field_count") - 1, result_field_count_read, NULL}, @@ -503,15 +447,6 @@ const mysqli_property_entry mysqli_result_property_entries[] = { {NULL, 0, NULL, NULL} }; -const zend_property_info mysqli_result_property_info_entries[] = { - {ZEND_ACC_PUBLIC, "current_field", sizeof("current_field")-1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "field_count", sizeof("field_count") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "lengths", sizeof("lengths") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "num_rows", sizeof("num_rows") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "type", sizeof("type") - 1, -1, 0, NULL, 0, NULL}, - {0, NULL, 0, -1, 0, NULL, 0, NULL} -}; - const mysqli_property_entry mysqli_stmt_property_entries[] = { {"affected_rows", sizeof("affected_rows")-1,stmt_affected_rows_read, NULL}, {"insert_id", sizeof("insert_id") - 1, stmt_insert_id_read, NULL}, @@ -526,21 +461,6 @@ const mysqli_property_entry mysqli_stmt_property_entries[] = { {NULL, 0, NULL, NULL} }; - -const zend_property_info mysqli_stmt_property_info_entries[] = { - {ZEND_ACC_PUBLIC, "affected_rows", sizeof("affected_rows") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "insert_id", sizeof("insert_id") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "num_rows", sizeof("num_rows") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "param_count",sizeof("param_count") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "field_count",sizeof("field_count") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "errno", sizeof("errno") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "error", sizeof("error") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "error_list", sizeof("error_list") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "sqlstate", sizeof("sqlstate") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "id", sizeof("id") - 1, -1, 0, NULL, 0, NULL}, - {0, NULL, 0, -1, 0, NULL, 0, NULL} -}; - /* * Local variables: * tab-width: 4 diff --git a/ext/mysqli/mysqli_report.c b/ext/mysqli/mysqli_report.c index a679bef689..30af7bb11a 100644 --- a/ext/mysqli/mysqli_report.c +++ b/ext/mysqli/mysqli_report.c @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2015 The PHP Group | +----------------------------------------------------------------------+ @@ -27,16 +27,16 @@ #include "ext/standard/info.h" #include "php_mysqli_structs.h" -extern void php_mysqli_throw_sql_exception(char *sqlstate, int errorno TSRMLS_DC, char *format, ...); +extern void php_mysqli_throw_sql_exception(char *sqlstate, int errorno, char *format, ...); /* {{{ proto bool mysqli_report(int flags) sets report level */ PHP_FUNCTION(mysqli_report) { - long flags; + zend_long flags; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &flags) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &flags) == FAILURE) { return; } @@ -47,14 +47,14 @@ PHP_FUNCTION(mysqli_report) /* }}} */ /* {{{ void php_mysqli_report_error(char *sqlstate, int errorno, char *error) */ -void php_mysqli_report_error(const char *sqlstate, int errorno, const char *error TSRMLS_DC) +void php_mysqli_report_error(const char *sqlstate, int errorno, const char *error) { - php_mysqli_throw_sql_exception((char *)sqlstate, errorno TSRMLS_CC, "%s", error); + php_mysqli_throw_sql_exception((char *)sqlstate, errorno, "%s", error); } /* }}} */ /* {{{ void php_mysqli_report_index() */ -void php_mysqli_report_index(const char *query, unsigned int status TSRMLS_DC) { +void php_mysqli_report_index(const char *query, unsigned int status) { char index[15]; if (status & SERVER_QUERY_NO_GOOD_INDEX_USED) { @@ -64,7 +64,7 @@ void php_mysqli_report_index(const char *query, unsigned int status TSRMLS_DC) { } else { return; } - php_mysqli_throw_sql_exception("00000", 0 TSRMLS_CC, "%s used in query/prepared statement %s", index, query); + php_mysqli_throw_sql_exception("00000", 0, "%s used in query/prepared statement %s", index, query); } /* }}} */ diff --git a/ext/mysqli/mysqli_result_iterator.c b/ext/mysqli/mysqli_result_iterator.c index d1834b3825..47fabbadaf 100644 --- a/ext/mysqli/mysqli_result_iterator.c +++ b/ext/mysqli/mysqli_result_iterator.c @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2015 The PHP Group | +----------------------------------------------------------------------+ @@ -38,13 +38,13 @@ extern zend_object_iterator_funcs php_mysqli_result_iterator_funcs; typedef struct { zend_object_iterator intern; mysqli_object *result; - zval *current_row; + zval current_row; my_longlong row_num; } php_mysqli_result_iterator; /* {{{ */ -zend_object_iterator *php_mysqli_result_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC) +zend_object_iterator *php_mysqli_result_get_iterator(zend_class_entry *ce, zval *object, int by_ref) { php_mysqli_result_iterator *iterator; @@ -52,57 +52,48 @@ zend_object_iterator *php_mysqli_result_get_iterator(zend_class_entry *ce, zval zend_error(E_ERROR, "An iterator cannot be used with foreach by reference"); } iterator = ecalloc(1, sizeof(php_mysqli_result_iterator)); + zend_iterator_init(&iterator->intern); - Z_ADDREF_P(object); - iterator->intern.data = (void*)object; + ZVAL_COPY(&iterator->intern.data, object); iterator->intern.funcs = &php_mysqli_result_iterator_funcs; - iterator->result = (mysqli_object *) zend_object_store_get_object(object TSRMLS_CC); + iterator->result = Z_MYSQLI_P(object); iterator->row_num = -1; - return (zend_object_iterator*)iterator; + return &iterator->intern; } /* }}} */ - /* {{{ */ -static void php_mysqli_result_iterator_dtor(zend_object_iterator *iter TSRMLS_DC) +static void php_mysqli_result_iterator_dtor(zend_object_iterator *iter) { - php_mysqli_result_iterator *iterator = (php_mysqli_result_iterator*) iter; + php_mysqli_result_iterator *iterator = (php_mysqli_result_iterator*)iter; /* cleanup handled in sxe_object_dtor as we dont always have an iterator wrapper */ - if (iterator->intern.data) { - zval_ptr_dtor((zval**)&iterator->intern.data); - } - if (iterator->current_row) { - zval_ptr_dtor(&iterator->current_row); - } - efree(iterator); + zval_ptr_dtor(&iterator->intern.data); + zval_ptr_dtor(&iterator->current_row); } /* }}} */ - /* {{{ */ -static int php_mysqli_result_iterator_valid(zend_object_iterator *iter TSRMLS_DC) +static int php_mysqli_result_iterator_valid(zend_object_iterator *iter) { php_mysqli_result_iterator *iterator = (php_mysqli_result_iterator*) iter; - return iterator->current_row && Z_TYPE_P(iterator->current_row) == IS_ARRAY ? SUCCESS : FAILURE; + return Z_TYPE(iterator->current_row) == IS_ARRAY ? SUCCESS : FAILURE; } /* }}} */ - /* {{{ */ -static void php_mysqli_result_iterator_current_data(zend_object_iterator *iter, zval ***data TSRMLS_DC) +static zval *php_mysqli_result_iterator_current_data(zend_object_iterator *iter) { php_mysqli_result_iterator *iterator = (php_mysqli_result_iterator*) iter; - *data = &iterator->current_row; + return &iterator->current_row; } /* }}} */ - /* {{{ */ -static void php_mysqli_result_iterator_move_forward(zend_object_iterator *iter TSRMLS_DC) +static void php_mysqli_result_iterator_move_forward(zend_object_iterator *iter) { php_mysqli_result_iterator *iterator = (php_mysqli_result_iterator*) iter; @@ -110,20 +101,17 @@ static void php_mysqli_result_iterator_move_forward(zend_object_iterator *iter T MYSQL_RES *result; MYSQLI_FETCH_RESOURCE_BY_OBJ(result, MYSQL_RES *, intern, "mysqli_result", MYSQLI_STATUS_VALID); - if (iterator->current_row) { - zval_ptr_dtor(&iterator->current_row); - } - MAKE_STD_ZVAL(iterator->current_row); - php_mysqli_fetch_into_hash_aux(iterator->current_row, result, MYSQLI_ASSOC TSRMLS_CC); - if (Z_TYPE_P(iterator->current_row) == IS_ARRAY) { + + zval_ptr_dtor(&iterator->current_row); + php_mysqli_fetch_into_hash_aux(&iterator->current_row, result, MYSQLI_ASSOC); + if (Z_TYPE(iterator->current_row) == IS_ARRAY) { iterator->row_num++; } } /* }}} */ - /* {{{ */ -static void php_mysqli_result_iterator_rewind(zend_object_iterator *iter TSRMLS_DC) +static void php_mysqli_result_iterator_rewind(zend_object_iterator *iter) { php_mysqli_result_iterator *iterator = (php_mysqli_result_iterator*) iter; mysqli_object *intern = iterator->result; @@ -137,20 +125,19 @@ static void php_mysqli_result_iterator_rewind(zend_object_iterator *iter TSRMLS_ #else if (result->eof) { #endif - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Data fetched with MYSQLI_USE_RESULT can be iterated only once"); + php_error_docref(NULL, E_WARNING, "Data fetched with MYSQLI_USE_RESULT can be iterated only once"); return; } } else { mysql_data_seek(result, 0); } iterator->row_num = -1; - php_mysqli_result_iterator_move_forward(iter TSRMLS_CC); + php_mysqli_result_iterator_move_forward(iter); } /* }}} */ - /* {{{ php_mysqli_result_iterator_current_key */ -static void php_mysqli_result_iterator_current_key(zend_object_iterator *iter, zval *key TSRMLS_DC) +static void php_mysqli_result_iterator_current_key(zend_object_iterator *iter, zval *key) { php_mysqli_result_iterator *iterator = (php_mysqli_result_iterator*) iter; @@ -158,7 +145,6 @@ static void php_mysqli_result_iterator_current_key(zend_object_iterator *iter, z } /* }}} */ - /* {{{ php_mysqli_result_iterator_funcs */ zend_object_iterator_funcs php_mysqli_result_iterator_funcs = { php_mysqli_result_iterator_dtor, @@ -170,7 +156,6 @@ zend_object_iterator_funcs php_mysqli_result_iterator_funcs = { }; /* }}} */ - /* * Local variables: * tab-width: 4 diff --git a/ext/mysqli/mysqli_warning.c b/ext/mysqli/mysqli_warning.c index 60d15bfe7d..396c6ed7eb 100644 --- a/ext/mysqli/mysqli_warning.c +++ b/ext/mysqli/mysqli_warning.c @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2015 The PHP Group | +----------------------------------------------------------------------+ @@ -28,13 +28,12 @@ #include "php_mysqli_structs.h" #include "mysqli_priv.h" -/* Define these in the PHP5 tree to make merging easy process */ -#define ZSTR_DUPLICATE (1<<0) +/* Define these in the PHP7 tree to make merging easy process */ +#define Zzend_string_dupLICATE (1<<0) #define ZSTR_AUTOFREE (1<<1) -#define ZVAL_UTF8_STRING(z, s, flags) ZVAL_STRING((z), (char*)(s), ((flags) & ZSTR_DUPLICATE)) -#define ZVAL_UTF8_STRINGL(z, s, l, flags) ZVAL_STRINGL((z), (char*)(s), (l), ((flags) & ZSTR_DUPLICATE)) - +#define ZVAL_UTF8_STRING(z, s, flags) ZVAL_STRING((z), (char*)(s)) +#define ZVAL_UTF8_STRINGL(z, s, l, flags) ZVAL_STRINGL((z), (char*)(s), (l)) /* {{{ void php_clear_warnings() */ void php_clear_warnings(MYSQLI_WARNING *w) @@ -51,19 +50,18 @@ void php_clear_warnings(MYSQLI_WARNING *w) } /* }}} */ - #ifndef MYSQLI_USE_MYSQLND /* {{{ MYSQLI_WARNING *php_new_warning */ static -MYSQLI_WARNING *php_new_warning(const char *reason, int errorno TSRMLS_DC) +MYSQLI_WARNING *php_new_warning(const char *reason, int errorno) { MYSQLI_WARNING *w; w = (MYSQLI_WARNING *)ecalloc(1, sizeof(MYSQLI_WARNING)); - ZVAL_UTF8_STRING(&(w->reason), reason, ZSTR_DUPLICATE); + ZVAL_UTF8_STRING(&(w->reason), reason, Zzend_string_dupLICATE); - ZVAL_UTF8_STRINGL(&(w->sqlstate), "HY000", sizeof("HY000") - 1, ZSTR_DUPLICATE); + ZVAL_UTF8_STRINGL(&(w->sqlstate), "HY000", sizeof("HY000") - 1, Zzend_string_dupLICATE); w->errorno = errorno; @@ -71,9 +69,8 @@ MYSQLI_WARNING *php_new_warning(const char *reason, int errorno TSRMLS_DC) } /* }}} */ - -/* {{{ MYSQLI_WARNING *php_get_warnings(MYSQL *mysql TSRMLS_DC) */ -MYSQLI_WARNING *php_get_warnings(MYSQL *mysql TSRMLS_DC) +/* {{{ MYSQLI_WARNING *php_get_warnings(MYSQL *mysql) */ +MYSQLI_WARNING *php_get_warnings(MYSQL *mysql) { MYSQLI_WARNING *w, *first = NULL, *prev = NULL; MYSQL_RES *result; @@ -86,7 +83,7 @@ MYSQLI_WARNING *php_get_warnings(MYSQL *mysql TSRMLS_DC) result = mysql_store_result(mysql); while ((row = mysql_fetch_row(result))) { - w = php_new_warning(row[2], atoi(row[1]) TSRMLS_CC); + w = php_new_warning(row[2], atoi(row[1])); if (!first) { first = w; } @@ -102,18 +99,18 @@ MYSQLI_WARNING *php_get_warnings(MYSQL *mysql TSRMLS_DC) #else /* {{{ MYSQLI_WARNING *php_new_warning */ static -MYSQLI_WARNING *php_new_warning(const zval * reason, int errorno TSRMLS_DC) +MYSQLI_WARNING *php_new_warning(const zval * reason, int errorno) { MYSQLI_WARNING *w; w = (MYSQLI_WARNING *)ecalloc(1, sizeof(MYSQLI_WARNING)); - w->reason = *reason; - zval_copy_ctor(&(w->reason)); + ZVAL_DUP(&w->reason, (zval *)reason); + convert_to_string(&w->reason); - ZVAL_UTF8_STRINGL(&(w->reason), Z_STRVAL(w->reason), Z_STRLEN(w->reason), ZSTR_AUTOFREE); + //????ZVAL_UTF8_STRINGL(&(w->reason), Z_STRVAL(w->reason), Z_STRLEN(w->reason), ZSTR_AUTOFREE); - ZVAL_UTF8_STRINGL(&(w->sqlstate), "HY000", sizeof("HY000") - 1, ZSTR_DUPLICATE); + ZVAL_UTF8_STRINGL(&(w->sqlstate), "HY000", sizeof("HY000") - 1, Zzend_string_dupLICATE); w->errorno = errorno; @@ -121,44 +118,42 @@ MYSQLI_WARNING *php_new_warning(const zval * reason, int errorno TSRMLS_DC) } /* }}} */ - -/* {{{ MYSQLI_WARNING *php_get_warnings(MYSQL *mysql TSRMLS_DC) */ -MYSQLI_WARNING * php_get_warnings(MYSQLND_CONN_DATA * mysql TSRMLS_DC) +/* {{{ MYSQLI_WARNING *php_get_warnings(MYSQL *mysql) */ +MYSQLI_WARNING * php_get_warnings(MYSQLND_CONN_DATA * mysql) { MYSQLI_WARNING *w, *first = NULL, *prev = NULL; MYSQL_RES *result; - zval *row; + zval row; - if (mysql->m->query(mysql, "SHOW WARNINGS", 13 TSRMLS_CC)) { + if (mysql->m->query(mysql, "SHOW WARNINGS", 13)) { return NULL; } - result = mysql->m->use_result(mysql, 0 TSRMLS_CC); + result = mysql->m->use_result(mysql, 0); for (;;) { - zval **entry; + zval *entry; int errno; - MAKE_STD_ZVAL(row); - mysqlnd_fetch_into(result, MYSQLND_FETCH_NUM, row, MYSQLND_MYSQLI); - if (Z_TYPE_P(row) != IS_ARRAY) { + mysqlnd_fetch_into(result, MYSQLND_FETCH_NUM, &row, MYSQLND_MYSQLI); + if (Z_TYPE(row) != IS_ARRAY) { zval_ptr_dtor(&row); break; } - zend_hash_internal_pointer_reset(Z_ARRVAL_P(row)); + zend_hash_internal_pointer_reset(Z_ARRVAL(row)); /* 0. we don't care about the first */ - zend_hash_move_forward(Z_ARRVAL_P(row)); + zend_hash_move_forward(Z_ARRVAL(row)); /* 1. Here comes the error no */ - zend_hash_get_current_data(Z_ARRVAL_P(row), (void **)&entry); + entry = zend_hash_get_current_data(Z_ARRVAL(row)); convert_to_long_ex(entry); - errno = Z_LVAL_PP(entry); - zend_hash_move_forward(Z_ARRVAL_P(row)); + errno = Z_LVAL_P(entry); + zend_hash_move_forward(Z_ARRVAL(row)); /* 2. Here comes the reason */ - zend_hash_get_current_data(Z_ARRVAL_P(row), (void **)&entry); + entry = zend_hash_get_current_data(Z_ARRVAL(row)); - w = php_new_warning(*entry, errno TSRMLS_CC); + w = php_new_warning(entry, errno); /* Don't destroy entry, because the row destroy will decrease the refcounter. Decreased twice then mysqlnd_free_result() @@ -181,21 +176,20 @@ MYSQLI_WARNING * php_get_warnings(MYSQLND_CONN_DATA * mysql TSRMLS_DC) /* }}} */ #endif - /* {{{ bool mysqli_warning::next() */ PHP_METHOD(mysqli_warning, next) { MYSQLI_WARNING *w; zval *mysqli_warning; - mysqli_object *obj = (mysqli_object *)zend_objects_get_address(getThis() TSRMLS_CC); + mysqli_object *obj = Z_MYSQLI_P(getThis()); if (obj->ptr) { - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", + if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysqli_warning, mysqli_warning_class_entry) == FAILURE) { return; } - MYSQLI_FETCH_RESOURCE(w, MYSQLI_WARNING *, &mysqli_warning, "mysqli_warning", MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE(w, MYSQLI_WARNING *, mysqli_warning, "mysqli_warning", MYSQLI_STATUS_VALID); if (w && w->next) { w = w->next; @@ -207,58 +201,50 @@ PHP_METHOD(mysqli_warning, next) } /* }}} */ - /* {{{ property mysqli_warning_message */ static -int mysqli_warning_message(mysqli_object *obj, zval **retval TSRMLS_DC) +zval *mysqli_warning_message(mysqli_object *obj, zval *retval) { MYSQLI_WARNING *w; if (!obj->ptr || !((MYSQLI_RESOURCE *)(obj->ptr))->ptr) { - return FAILURE; + return NULL; } w = (MYSQLI_WARNING *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; - MAKE_STD_ZVAL(*retval); - **retval = w->reason; - zval_copy_ctor(*retval); - return SUCCESS; + ZVAL_COPY(retval, &w->reason); + return retval; } /* }}} */ - /* {{{ property mysqli_warning_sqlstate */ static -int mysqli_warning_sqlstate(mysqli_object *obj, zval **retval TSRMLS_DC) +zval *mysqli_warning_sqlstate(mysqli_object *obj, zval *retval) { MYSQLI_WARNING *w; if (!obj->ptr || !((MYSQLI_RESOURCE *)(obj->ptr))->ptr) { - return FAILURE; + return NULL; } w = (MYSQLI_WARNING *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; - MAKE_STD_ZVAL(*retval); - **retval = w->sqlstate; - zval_copy_ctor(*retval); - return SUCCESS; + ZVAL_COPY(retval, &w->sqlstate); + return retval; } /* }}} */ - /* {{{ property mysqli_warning_error */ static -int mysqli_warning_errno(mysqli_object *obj, zval **retval TSRMLS_DC) +zval *mysqli_warning_errno(mysqli_object *obj, zval *retval) { MYSQLI_WARNING *w; if (!obj->ptr || !((MYSQLI_RESOURCE *)(obj->ptr))->ptr) { - return FAILURE; + return NULL; } w = (MYSQLI_WARNING *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; - MAKE_STD_ZVAL(*retval); - ZVAL_LONG(*retval, w->errorno); - return SUCCESS; + ZVAL_LONG(retval, w->errorno); + return retval; } /* }}} */ @@ -276,41 +262,41 @@ PHP_METHOD(mysqli_warning, __construct) if (ZEND_NUM_ARGS() != 1) { WRONG_PARAM_COUNT; } - if (zend_parse_parameters(1 TSRMLS_CC, "o", &z)==FAILURE) { + if (zend_parse_parameters(1, "o", &z)==FAILURE) { return; } - obj = (mysqli_object *)zend_object_store_get_object(z TSRMLS_CC);\ + obj = Z_MYSQLI_P(z); if (obj->zo.ce == mysqli_link_class_entry) { MY_MYSQL *mysql; - MYSQLI_FETCH_RESOURCE_CONN(mysql, &z, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_CONN(mysql, z, MYSQLI_STATUS_VALID); if (mysql_warning_count(mysql->mysql)) { #ifndef MYSQLI_USE_MYSQLND - w = php_get_warnings(mysql->mysql TSRMLS_CC); + w = php_get_warnings(mysql->mysql); #else - w = php_get_warnings(mysql->mysql->data TSRMLS_CC); + w = php_get_warnings(mysql->mysql->data); #endif } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "No warnings found"); + php_error_docref(NULL, E_WARNING, "No warnings found"); RETURN_FALSE; } } else if (obj->zo.ce == mysqli_stmt_class_entry) { MY_STMT *stmt; - MYSQLI_FETCH_RESOURCE_STMT(stmt, &z, MYSQLI_STATUS_VALID); + MYSQLI_FETCH_RESOURCE_STMT(stmt, z, MYSQLI_STATUS_VALID); #ifndef MYSQLI_USE_MYSQLND hdl = mysqli_stmt_get_connection(stmt->stmt); if (mysql_warning_count(hdl)) { - w = php_get_warnings(hdl TSRMLS_CC); + w = php_get_warnings(hdl); #else if (mysqlnd_stmt_warning_count(stmt->stmt)) { - w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC); + w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt)); #endif } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "No warnings found"); + php_error_docref(NULL, E_WARNING, "No warnings found"); RETURN_FALSE; } } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid class argument"); + php_error_docref(NULL, E_WARNING, "invalid class argument"); RETURN_FALSE; } @@ -318,10 +304,10 @@ PHP_METHOD(mysqli_warning, __construct) mysqli_resource->ptr = mysqli_resource->info = (void *)w; mysqli_resource->status = MYSQLI_STATUS_VALID; - if (!getThis() || !instanceof_function(Z_OBJCE_P(getThis()), mysqli_warning_class_entry TSRMLS_CC)) { + if (!getThis() || !instanceof_function(Z_OBJCE_P(getThis()), mysqli_warning_class_entry)) { MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } else { - ((mysqli_object *) zend_object_store_get_object(getThis() TSRMLS_CC))->ptr = mysqli_resource; + (Z_MYSQLI_P(getThis()))->ptr = mysqli_resource; } } @@ -344,16 +330,6 @@ const mysqli_property_entry mysqli_warning_property_entries[] = { }; /* }}} */ -/* {{{ mysqli_warning_property_info_entries */ -const zend_property_info mysqli_warning_property_info_entries[] = { - {ZEND_ACC_PUBLIC, "message", sizeof("message") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "sqlstate", sizeof("sqlstate") - 1, -1, 0, NULL, 0, NULL}, - {ZEND_ACC_PUBLIC, "errno", sizeof("errno") - 1, -1, 0, NULL, 0, NULL}, - {0, NULL, 0, -1, 0, NULL, 0, NULL} -}; -/* }}} */ - - /* * Local variables: * tab-width: 4 diff --git a/ext/mysqli/package.xml b/ext/mysqli/package.xml index c27316a055..bfeeb71850 100644 --- a/ext/mysqli/package.xml +++ b/ext/mysqli/package.xml @@ -35,7 +35,6 @@ package.xml added to support installation using pear installer <filelist> <file role="src" name="config.m4"/> <file role="src" name="config.w32"/> - <file role="src" name="mysqli.dsp"/> <file role="src" name="mysqli.c"/> <file role="src" name="mysqli_api.c"/> <file role="src" name="mysqli_fe.c"/> diff --git a/ext/mysqli/php_mysqli.h b/ext/mysqli/php_mysqli.h index 3d22104c3c..3cfc8fa847 100644 --- a/ext/mysqli/php_mysqli.h +++ b/ext/mysqli/php_mysqli.h @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2015 The PHP Group | +----------------------------------------------------------------------+ @@ -26,6 +26,9 @@ #define phpext_mysqli_ptr &mysqli_module_entry extern zend_module_entry mysqli_module_entry; +#include "php_version.h" +#define PHP_MYSQLI_VERSION PHP_VERSION + #endif /* PHP_MYSQLI.H */ /* diff --git a/ext/mysqli/php_mysqli_structs.h b/ext/mysqli/php_mysqli_structs.h index d061bfb21a..055765197d 100644 --- a/ext/mysqli/php_mysqli_structs.h +++ b/ext/mysqli/php_mysqli_structs.h @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2015 The PHP Group | +----------------------------------------------------------------------+ @@ -99,15 +99,15 @@ enum mysqli_status { typedef struct { char *val; - ulong buflen; - ulong output_len; - ulong type; + zend_ulong buflen; + zend_ulong output_len; + zend_ulong type; } VAR_BUFFER; typedef struct { unsigned int var_cnt; VAR_BUFFER *buf; - zval **vars; + zval *vars; char *is_null; } BIND_BUFFER; @@ -118,14 +118,14 @@ typedef struct { char *query; #ifndef MYSQLI_USE_MYSQLND /* used to manage refcount with libmysql (already implement in mysqlnd) */ - zend_object_handle link_handle; + zval link_handle; #endif } MY_STMT; typedef struct { MYSQL *mysql; - char *hash_key; - zval *li_read; + zend_string *hash_key; + zval li_read; php_stream *li_stream; unsigned int multi_query; zend_bool persistent; @@ -141,11 +141,17 @@ typedef struct { } MYSQLI_RESOURCE; typedef struct _mysqli_object { - zend_object zo; void *ptr; HashTable *prop_handler; + zend_object zo; } mysqli_object; /* extends zend_object */ +static inline mysqli_object *php_mysqli_fetch_object(zend_object *obj) { + return (mysqli_object *)((char*)(obj) - XtOffsetOf(mysqli_object, zo)); +} + +#define Z_MYSQLI_P(zv) php_mysqli_fetch_object(Z_OBJ_P((zv))) + typedef struct st_mysqli_warning MYSQLI_WARNING; struct st_mysqli_warning { @@ -158,11 +164,10 @@ struct st_mysqli_warning { typedef struct _mysqli_property_entry { const char *pname; size_t pname_length; - int (*r_func)(mysqli_object *obj, zval **retval TSRMLS_DC); - int (*w_func)(mysqli_object *obj, zval *value TSRMLS_DC); + zval *(*r_func)(mysqli_object *obj, zval *retval); + int (*w_func)(mysqli_object *obj, zval *value); } mysqli_property_entry; - typedef struct { zend_ptr_stack free_links; } mysqli_plist_entry; @@ -204,12 +209,12 @@ extern zend_class_entry *mysqli_exception_class_entry; extern int php_le_pmysqli(void); extern void php_mysqli_dtor_p_elements(void *data); -extern void php_mysqli_close(MY_MYSQL * mysql, int close_type, int resource_status TSRMLS_DC); +extern void php_mysqli_close(MY_MYSQL * mysql, int close_type, int resource_status); extern zend_object_iterator_funcs php_mysqli_result_iterator_funcs; -extern zend_object_iterator *php_mysqli_result_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC); +extern zend_object_iterator *php_mysqli_result_get_iterator(zend_class_entry *ce, zval *object, int by_ref); -extern void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES * result, long fetchtype TSRMLS_DC); +extern void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES * result, zend_long fetchtype); #ifdef HAVE_SPL extern PHPAPI zend_class_entry *spl_ce_RuntimeException; @@ -229,39 +234,37 @@ extern PHPAPI zend_class_entry *spl_ce_RuntimeException; zend_class_entry ce; \ INIT_CLASS_ENTRY(ce, name,class_functions); \ ce.create_object = mysqli_objects_new; \ - mysqli_entry = zend_register_internal_class(&ce TSRMLS_CC); \ + mysqli_entry = zend_register_internal_class(&ce); \ } \ #define MYSQLI_REGISTER_RESOURCE_EX(__ptr, __zval) \ - ((mysqli_object *) zend_object_store_get_object(__zval TSRMLS_CC))->ptr = __ptr; + (Z_MYSQLI_P(__zval))->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); \ + RETVAL_OBJ(mysqli_objects_new(__ce)); \ MYSQLI_REGISTER_RESOURCE_EX(__ptr, return_value) #define MYSQLI_REGISTER_RESOURCE(__ptr, __ce) \ {\ - zval *object = getThis();\ - if (!object || !instanceof_function(Z_OBJCE_P(object), mysqli_link_class_entry TSRMLS_CC)) {\ - object = return_value;\ - Z_TYPE_P(object) = IS_OBJECT;\ - (object)->value.obj = mysqli_objects_new(__ce TSRMLS_CC);\ - }\ + zval *object = getThis(); \ + if (!object || !instanceof_function(Z_OBJCE_P(object), mysqli_link_class_entry)) { \ + object = return_value; \ + ZVAL_OBJ(object, mysqli_objects_new(__ce)); \ + } \ MYSQLI_REGISTER_RESOURCE_EX(__ptr, object)\ } #define MYSQLI_FETCH_RESOURCE(__ptr, __type, __id, __name, __check) \ { \ MYSQLI_RESOURCE *my_res; \ - mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\ + mysqli_object *intern = Z_MYSQLI_P(__id); \ if (!(my_res = (MYSQLI_RESOURCE *)intern->ptr)) {\ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", intern->zo.ce->name);\ + php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", intern->zo.ce->name->val);\ RETURN_NULL();\ }\ __ptr = (__type)my_res->ptr; \ if (__check && my_res->status < __check) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name); \ + php_error_docref(NULL, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name->val); \ RETURN_NULL();\ }\ } @@ -270,24 +273,23 @@ extern PHPAPI zend_class_entry *spl_ce_RuntimeException; { \ MYSQLI_RESOURCE *my_res; \ if (!(my_res = (MYSQLI_RESOURCE *)(__obj->ptr))) {\ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", intern->zo.ce->name);\ + php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", intern->zo.ce->name->val);\ return;\ }\ __ptr = (__type)my_res->ptr; \ if (__check && my_res->status < __check) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name); \ + php_error_docref(NULL, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name->val); \ return;\ }\ } - #define MYSQLI_FETCH_RESOURCE_CONN(__ptr, __id, __check) \ { \ MYSQLI_FETCH_RESOURCE((__ptr), MY_MYSQL *, (__id), "mysqli_link", (__check)); \ if (!(__ptr)->mysql) { \ - mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name); \ - RETURN_NULL();\ + mysqli_object *intern = Z_MYSQLI_P(__id); \ + php_error_docref(NULL, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name->val); \ + RETURN_NULL(); \ } \ } @@ -295,55 +297,57 @@ extern PHPAPI zend_class_entry *spl_ce_RuntimeException; { \ MYSQLI_FETCH_RESOURCE((__ptr), MY_STMT *, (__id), "mysqli_stmt", (__check)); \ if (!(__ptr)->stmt) { \ - mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name); \ + mysqli_object *intern = Z_MYSQLI_P(__id); \ + php_error_docref(NULL, E_WARNING, "invalid object or resource %s\n", intern->zo.ce->name->val); \ RETURN_NULL();\ } \ } - #define MYSQLI_SET_STATUS(__id, __value) \ { \ - mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\ + mysqli_object *intern = Z_MYSQLI_P(__id); \ ((MYSQLI_RESOURCE *)intern->ptr)->status = __value; \ } \ #define MYSQLI_CLEAR_RESOURCE(__id) \ { \ - mysqli_object *intern = (mysqli_object *)zend_object_store_get_object(*(__id) TSRMLS_CC);\ + mysqli_object *intern = Z_MYSQLI_P(__id); \ efree(intern->ptr); \ intern->ptr = NULL; \ } ZEND_BEGIN_MODULE_GLOBALS(mysqli) - long default_link; - long num_links; - long max_links; - long num_active_persistent; - long num_inactive_persistent; - long max_persistent; - long allow_persistent; - unsigned long default_port; + zend_long default_link; + zend_long num_links; + zend_long max_links; + zend_long num_active_persistent; + zend_long num_inactive_persistent; + zend_long max_persistent; + zend_long allow_persistent; + zend_ulong default_port; char *default_host; char *default_user; char *default_socket; char *default_pw; - long reconnect; - long allow_local_infile; - long strict; - long error_no; + zend_long reconnect; + zend_long allow_local_infile; + zend_long strict; + zend_long error_no; char *error_msg; - long report_mode; + zend_long report_mode; HashTable *report_ht; - unsigned long multi_query; - unsigned long embedded; + zend_ulong multi_query; + zend_ulong embedded; zend_bool rollback_on_cached_plink; ZEND_END_MODULE_GLOBALS(mysqli) #ifdef ZTS -#define MyG(v) TSRMG(mysqli_globals_id, zend_mysqli_globals *, v) +#define MyG(v) ZEND_TSRMG(mysqli_globals_id, zend_mysqli_globals *, v) +#ifdef COMPILE_DL_MYSQLI +ZEND_TSRMLS_CACHE_EXTERN(); +#endif #else #define MyG(v) (mysqli_globals.v) #endif diff --git a/ext/mysqli/tests/045.phpt b/ext/mysqli/tests/045.phpt index d11c16636a..b643d159ae 100644 --- a/ext/mysqli/tests/045.phpt +++ b/ext/mysqli/tests/045.phpt @@ -31,7 +31,7 @@ mysqli_stmt_bind_result (SHOW) mysqli_stmt_bind_result($stmt, $c1, $c2); mysqli_stmt_fetch($stmt); mysqli_stmt_close($stmt); - if ((version_compare(PHP_VERSION, '5.9.9', '>') == 1) && mysqli_get_server_version($link) < 50000) { + if ((version_compare(PHP_VERSION, '6.0', '==') == 1) && mysqli_get_server_version($link) < 50000) { /* variables are binary */ settype($c1, "unicode"); settype($c2, "unicode"); diff --git a/ext/mysqli/tests/065.phpt b/ext/mysqli/tests/065.phpt index 9426644c9d..fbdf6e1277 100644 --- a/ext/mysqli/tests/065.phpt +++ b/ext/mysqli/tests/065.phpt @@ -8,7 +8,7 @@ require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_set_charset')) { die('skip mysqli_set_charset() not available'); } -if (version_compare(PHP_VERSION, '5.9.9', '>') == 1) { +if (version_compare(PHP_VERSION, '6.0', '==') == 1) { die('skip set character set not functional with PHP 6 (fomerly PHP 6 && unicode.semantics=On)'); } ?> diff --git a/ext/mysqli/tests/bug33491.phpt b/ext/mysqli/tests/bug33491.phpt index 7e994bc4d0..6500241760 100644 --- a/ext/mysqli/tests/bug33491.phpt +++ b/ext/mysqli/tests/bug33491.phpt @@ -1,7 +1,7 @@ --TEST-- Bug #33491 (extended mysqli class crashes when result is not object) --INI-- -error_reporting=4095 +error_reporting=1 --SKIPIF-- <?php require_once('skipif.inc'); @@ -26,4 +26,8 @@ $DB->query_single('SELECT DATE()'); ?> --EXPECTF-- -Fatal error: Call to a member function fetch_row() on boolean in %sbug33491.php on line %d +Fatal error: Uncaught Error: Call to a member function fetch_row() on boolean in %sbug33491.php:%d +Stack trace: +#0 %s(%d): DB->query_single('SELECT DATE()') +#1 {main} + thrown in %sbug33491.php on line %d diff --git a/ext/mysqli/tests/bug35517.phpt b/ext/mysqli/tests/bug35517.phpt index 746251f97c..d2ef748e45 100644 --- a/ext/mysqli/tests/bug35517.phpt +++ b/ext/mysqli/tests/bug35517.phpt @@ -24,7 +24,8 @@ require_once('skipifconnectfailure.inc'); if (gettype($id) !== 'string') { printf("[002] Expecting string on 32bit got %s/%s\n", gettype($id), var_export($id, true)); } - if ((version_compare(PHP_VERSION, '5.9.9', '>') == 1) && !is_unicode($id)) { + if ((version_compare(PHP_VERSION, '6.0', '==') == 1) && + !is_unicode($id)) { printf("[003] Expecting unicode string\n"); } } diff --git a/ext/mysqli/tests/bug37090.phpt b/ext/mysqli/tests/bug37090.phpt index 839081df53..7c5a44851e 100644 --- a/ext/mysqli/tests/bug37090.phpt +++ b/ext/mysqli/tests/bug37090.phpt @@ -7,7 +7,7 @@ require_once('skipifconnectfailure.inc'); if (!function_exists('mysqli_set_charset')) { die('skip mysqli_set_charset() not available'); } -if ((version_compare(PHP_VERSION, '5.9.9', '>') == 1)) { +if ((version_compare(PHP_VERSION, '6.0', '==') == 1)) { die("skip Functionality not available in unicode mode"); } ?> diff --git a/ext/mysqli/tests/bug38003.phpt b/ext/mysqli/tests/bug38003.phpt index af71f85f2c..a5f1a23bb5 100644 --- a/ext/mysqli/tests/bug38003.phpt +++ b/ext/mysqli/tests/bug38003.phpt @@ -17,4 +17,7 @@ $DB = new DB(); echo "Done\n"; ?> --EXPECTF-- -Fatal error: Call to private DB::__construct() from invalid context in %s on line %d +Fatal error: Uncaught Error: Call to private DB::__construct() from invalid context in %s:%d +Stack trace: +#0 {main} + thrown in %s on line %d diff --git a/ext/mysqli/tests/bug67839.phpt b/ext/mysqli/tests/bug67839.phpt index aadce9310a..58b2d2fa82 100644 --- a/ext/mysqli/tests/bug67839.phpt +++ b/ext/mysqli/tests/bug67839.phpt @@ -6,6 +6,8 @@ mysqli_float_handling - ensure 4 byte float is handled correctly require_once('skipifemb.inc'); require_once('skipifconnectfailure.inc'); ?> +--INI-- +precision=5 --FILE-- <?php require('connect.inc'); diff --git a/ext/mysqli/tests/connect.inc b/ext/mysqli/tests/connect.inc index 67ce60a48b..4acc20cb91 100644 --- a/ext/mysqli/tests/connect.inc +++ b/ext/mysqli/tests/connect.inc @@ -8,8 +8,8 @@ $driver = new mysqli_driver; - $host = getenv("MYSQL_TEST_HOST") ? getenv("MYSQL_TEST_HOST") : "127.0.0.1"; - $port = getenv("MYSQL_TEST_PORT") ? getenv("MYSQL_TEST_PORT") : 3308; + $host = getenv("MYSQL_TEST_HOST") ? getenv("MYSQL_TEST_HOST") : "localhost"; + $port = getenv("MYSQL_TEST_PORT") ? getenv("MYSQL_TEST_PORT") : 3306; $user = getenv("MYSQL_TEST_USER") ? getenv("MYSQL_TEST_USER") : "root"; $passwd = getenv("MYSQL_TEST_PASSWD") ? getenv("MYSQL_TEST_PASSWD") : ""; $db = getenv("MYSQL_TEST_DB") ? getenv("MYSQL_TEST_DB") : "test"; diff --git a/ext/mysqli/tests/local_infile_tools.inc b/ext/mysqli/tests/local_infile_tools.inc index bb9872f1ab..7b4d9c12a9 100644 --- a/ext/mysqli/tests/local_infile_tools.inc +++ b/ext/mysqli/tests/local_infile_tools.inc @@ -59,7 +59,7 @@ register_shutdown_function("shutdown_clean", $file); } - if ((version_compare(PHP_VERSION, '5.9.9', '>') == 1)) { + if ((version_compare(PHP_VERSION, '6.0', '==') == 1)) { if (!fwrite($fp, (binary)"'97';'x';\n") || !fwrite($fp, (binary)"'98';'y';\n") || !fwrite($fp, (binary)"99;'z';\n")) { diff --git a/ext/mysqli/tests/mysqli_change_user_new.phpt b/ext/mysqli/tests/mysqli_change_user_new.phpt index e16895766f..0820a20b81 100644 --- a/ext/mysqli/tests/mysqli_change_user_new.phpt +++ b/ext/mysqli/tests/mysqli_change_user_new.phpt @@ -41,4 +41,4 @@ Warning: mysqli_query(): MySQL server has gone away in %s on line %d Warning: mysqli_query(): Error reading result set's header in %s on line %d [003] [2006] MySQL server has gone away -Fatal error: Call to a member function fetch_assoc() on %s in %s on line %d
\ No newline at end of file +Fatal error: Call to a member function fetch_assoc() on %s in %s on line %d diff --git a/ext/mysqli/tests/mysqli_change_user_set_names.phpt b/ext/mysqli/tests/mysqli_change_user_set_names.phpt index 3579e31358..913ade275e 100644 --- a/ext/mysqli/tests/mysqli_change_user_set_names.phpt +++ b/ext/mysqli/tests/mysqli_change_user_set_names.phpt @@ -129,7 +129,7 @@ if ($version[0] <= 4 && $version[1] < 1) var_dump($defaults); } - if ((version_compare(PHP_VERSION, '5.9.9', '>') == 1)) { + if ((version_compare(PHP_VERSION, '6.0', '==') == 1)) { // charsets cannot take any other value but utf8 in unicode mode $defaults['charset_client'] = 'utf8'; $defaults['charset_connection'] = 'utf8'; diff --git a/ext/mysqli/tests/mysqli_character_set.phpt b/ext/mysqli/tests/mysqli_character_set.phpt index 1bfe9cbdaa..7c25473331 100644 --- a/ext/mysqli/tests/mysqli_character_set.phpt +++ b/ext/mysqli/tests/mysqli_character_set.phpt @@ -10,9 +10,6 @@ require_once('skipifemb.inc'); if (!function_exists('mysqli_set_charset')) { die('skip mysqli_set_charset() not available'); } -if (version_compare(PHP_VERSION, '5.9.9', '>') == 1) { - die('skip set character set not functional with PHP 6 (fomerly PHP 6 && unicode.semantics=On)'); -} ?> --FILE-- <?php diff --git a/ext/mysqli/tests/mysqli_class_mysqli_properties_no_conn.phpt b/ext/mysqli/tests/mysqli_class_mysqli_properties_no_conn.phpt index e4d0b08a85..7e36c6571e 100644 --- a/ext/mysqli/tests/mysqli_class_mysqli_properties_no_conn.phpt +++ b/ext/mysqli/tests/mysqli_class_mysqli_properties_no_conn.phpt @@ -188,7 +188,7 @@ warning_count = 'NULL' Magic, magic properties: mysqli->affected_rows = ''/NULL (''/NULL) -Warning: assert(): Assertion failed in %s on line %d +Warning: assert(): assert(@mysqli_get_client_info() === @$mysqli->client_info) failed in %s on line %d mysqli->client_info = ''/NULL ('%s'/%s) mysqli->client_version = '%s'/integer ('%s'/integer) mysqli->errno = ''/NULL (''/NULL) @@ -199,7 +199,7 @@ mysqli->sqlstate = ''/NULL (''/NULL) mysqli->host_info = ''/NULL (''/NULL) mysqli->info = ''/NULL (''/NULL) -Warning: assert(): Assertion failed in %s on line %d +Warning: assert(): assert(@mysqli_thread_id($mysqli) > @$mysqli->thread_id) failed in %s on line %d mysqli->thread_id = ''/NULL (''/NULL) mysqli->protocol_version = ''/NULL (''/NULL) mysqli->server_info = ''/NULL (''/NULL) @@ -261,7 +261,7 @@ warning_count = 'NULL' Magic, magic properties: mysqli->affected_rows = ''/NULL (''/NULL) -Warning: assert(): Assertion failed in %s on line %d +Warning: assert(): assert(@mysqli_get_client_info() === @$mysqli->client_info) failed in %s on line %d mysqli->client_info = ''/NULL ('%s'/%s) mysqli->client_version = '%s'/integer ('%s'/integer) mysqli->errno = ''/NULL (''/NULL) @@ -272,7 +272,7 @@ mysqli->sqlstate = ''/NULL (''/NULL) mysqli->host_info = ''/NULL (''/NULL) mysqli->info = ''/NULL (''/NULL) -Warning: assert(): Assertion failed in %s on line %d +Warning: assert(): assert(@mysqli_thread_id($mysqli) > @$mysqli->thread_id) failed in %s on line %d mysqli->thread_id = ''/NULL (''/NULL) mysqli->protocol_version = ''/NULL (''/NULL) mysqli->server_info = ''/NULL (''/NULL) diff --git a/ext/mysqli/tests/mysqli_class_mysqli_result_interface.phpt b/ext/mysqli/tests/mysqli_class_mysqli_result_interface.phpt index b327fe656c..4381805acd 100644 --- a/ext/mysqli/tests/mysqli_class_mysqli_result_interface.phpt +++ b/ext/mysqli/tests/mysqli_class_mysqli_result_interface.phpt @@ -187,7 +187,7 @@ mysqli_result->unknown = '' Constructor: -Warning: mysqli_result::__construct() expects parameter 2 to be long, %unicode_string_optional% given in %s on line %d +Warning: mysqli_result::__construct() expects parameter 2 to be integer, %unicode_string_optional% given in %s on line %d Warning: mysqli_result::__construct() expects parameter 1 to be mysqli, %unicode_string_optional% given in %s on line %d done!
\ No newline at end of file diff --git a/ext/mysqli/tests/mysqli_driver_unclonable.phpt b/ext/mysqli/tests/mysqli_driver_unclonable.phpt index 0e2438eef9..e761d06532 100644 --- a/ext/mysqli/tests/mysqli_driver_unclonable.phpt +++ b/ext/mysqli/tests/mysqli_driver_unclonable.phpt @@ -10,4 +10,7 @@ Trying to clone mysqli_driver object print "done!"; ?> --EXPECTF-- -Fatal error: Trying to clone an uncloneable object of class mysqli_driver in %s on line %d
\ No newline at end of file +Fatal error: Uncaught Error: Trying to clone an uncloneable object of class mysqli_driver in %s:%d +Stack trace: +#0 {main} + thrown in %s on line %d
\ No newline at end of file diff --git a/ext/mysqli/tests/mysqli_error_unicode.phpt b/ext/mysqli/tests/mysqli_error_unicode.phpt index b59ed5f601..b6fdeacaa8 100644 --- a/ext/mysqli/tests/mysqli_error_unicode.phpt +++ b/ext/mysqli/tests/mysqli_error_unicode.phpt @@ -24,7 +24,7 @@ require_once('skipifconnectfailure.inc'); $host, $user, $db, $port, $socket); } - if (!(version_compare(PHP_VERSION, '5.9.9', '>') == 1)) { + if (!(version_compare(PHP_VERSION, '6.0', '==') == 1)) { mysqli_query($link, "set names utf8"); } diff --git a/ext/mysqli/tests/mysqli_fetch_object.phpt b/ext/mysqli/tests/mysqli_fetch_object.phpt index c70871e6ea..11dd0a5a4f 100644 --- a/ext/mysqli/tests/mysqli_fetch_object.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object.phpt @@ -101,8 +101,8 @@ require_once('skipifconnectfailure.inc'); try { if (false !== ($obj = @mysqli_fetch_object($res, 'mysqli_fetch_object_construct', 'a'))) printf("[011] Should have failed\n"); - } catch (Exception $e) { - printf("%s\n", $e->getMessage()); + } catch (Error $e) { + handle_catchable_fatal($e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine()); } mysqli_free_result($res); @@ -150,7 +150,6 @@ NULL NULL [E_WARNING] mysqli_fetch_object(): Couldn't fetch mysqli_result in %s on line %d NULL -[E_RECOVERABLE_ERROR] Argument 3 passed to mysqli_fetch_object() must be of the type array, string given in %s on line %d -Parameter ctor_params must be an array +[E_ERROR] Argument 3 passed to mysqli_fetch_object() must be of the type array, string given in %s on line %d -Fatal error: Class 'this_class_does_not_exist' not found in %s on line %d
\ No newline at end of file +Fatal error: Class 'this_class_does_not_exist' not found in %s on line %d diff --git a/ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt b/ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt index 2fa80cfa94..3a047a50fc 100644 --- a/ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt @@ -62,4 +62,7 @@ Exception: Class mysqli_fetch_object_test does not have a constructor hence you Fatal error with PHP (but no exception!): -Fatal error: Call to undefined method mysqli_fetch_object_test::mysqli_fetch_object_test() in %s on line %d +Fatal error: Uncaught Error: Call to undefined method mysqli_fetch_object_test::mysqli_fetch_object_test() in %s:%d +Stack trace: +#0 {main} + thrown in %s on line %d diff --git a/ext/mysqli/tests/mysqli_fetch_object_oo.phpt b/ext/mysqli/tests/mysqli_fetch_object_oo.phpt index 1d62c6dd4f..2b3f76c993 100644 --- a/ext/mysqli/tests/mysqli_fetch_object_oo.phpt +++ b/ext/mysqli/tests/mysqli_fetch_object_oo.phpt @@ -31,11 +31,20 @@ require_once('skipifconnectfailure.inc'); if (!is_null($tmp = @$res->fetch_object($link))) printf("[004] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); - if (!is_null($tmp = @$res->fetch_object($link, $link))) - printf("[005] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); + try { + if (!is_null($tmp = @$res->fetch_object($link, $link))) + printf("[005] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); + } catch (Error $e) { + handle_catchable_fatal($e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine()); + } + - if (!is_null($tmp = @$res->fetch_object($link, $link, $link))) - printf("[006] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); + try { + if (!is_null($tmp = @$res->fetch_object($link, $link, $link))) + printf("[006] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); + } catch (Error $e) { + handle_catchable_fatal($e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine()); + } $obj = mysqli_fetch_object($res); if (($obj->ID !== "1") || ($obj->label !== "a") || (get_class($obj) != 'stdClass')) { @@ -68,11 +77,16 @@ require_once('skipifconnectfailure.inc'); } - $obj = $res->fetch_object('mysqli_fetch_object_construct', null); + try { + $obj = $res->fetch_object('mysqli_fetch_object_construct', null); - if (($obj->ID !== "3") || ($obj->label !== "c") || ($obj->a !== NULL) || ($obj->b !== NULL) || (get_class($obj) != 'mysqli_fetch_object_construct')) { - printf("[009] Object seems wrong. [%d] %s\n", $mysqli->errno, $mysqli->error); - var_dump($obj); + if (($obj->ID !== "3") || ($obj->label !== "c") || ($obj->a !== NULL) || ($obj->b !== NULL) || (get_class($obj) != 'mysqli_fetch_object_construct')) { + printf("[009] Object seems wrong. [%d] %s\n", $mysqli->errno, $mysqli->error); + var_dump($obj); + } + } catch (Error $e) { + handle_catchable_fatal($e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine()); + mysqli_fetch_object($res); } $obj = $res->fetch_object('mysqli_fetch_object_construct', array('a')); @@ -115,15 +129,9 @@ require_once('skipifconnectfailure.inc'); %s on line %d [E_WARNING] mysqli_result::fetch_object(): Couldn't fetch mysqli_result in %s on line %d [E_WARNING] mysqli_result::fetch_object() expects parameter 1 to be string, object given in %s on line %d -[E_RECOVERABLE_ERROR] Argument 2 passed to mysqli_result::fetch_object() must be of the type array, object given in %s on line %d -[E_WARNING] mysqli_result::fetch_object() expects parameter 1 to be string, object given in %s on line %d -[E_RECOVERABLE_ERROR] Argument 2 passed to mysqli_result::fetch_object() must be of the type array, object given in %s on line %d -[E_WARNING] mysqli_result::fetch_object() expects at most 2 parameters, 3 given in %s on line %d -[E_RECOVERABLE_ERROR] Argument 2 passed to mysqli_result::fetch_object() must be of the type array, null given in %s on line %d -[E_WARNING] Missing argument 1 for mysqli_fetch_object_construct::__construct() in %s on line %d -[E_WARNING] Missing argument 2 for mysqli_fetch_object_construct::__construct() in %s on line %d -[E_NOTICE] Undefined variable: a in %s on line %d -[E_NOTICE] Undefined variable: b in %s on line %d +[E_ERROR] Argument 2 passed to mysqli_result::fetch_object() must be of the type array, object given in %s on line %d +[E_ERROR] Argument 2 passed to mysqli_result::fetch_object() must be of the type array, object given in %s on line %d +[E_ERROR] Argument 2 passed to mysqli_result::fetch_object() must be of the type array, null given in %s on line %d [E_WARNING] Missing argument 2 for mysqli_fetch_object_construct::__construct() in %s on line %d [E_NOTICE] Undefined variable: b in %s on line %d NULL @@ -131,4 +139,4 @@ NULL [E_WARNING] mysqli_fetch_object(): Couldn't fetch mysqli_result in %s on line %d NULL -Fatal error: Class 'this_class_does_not_exist' not found in %s on line %d
\ No newline at end of file +Fatal error: Class 'this_class_does_not_exist' not found in %s on line %d diff --git a/ext/mysqli/tests/mysqli_field_seek.phpt b/ext/mysqli/tests/mysqli_field_seek.phpt index 449d2f90d4..952c5056b7 100644 --- a/ext/mysqli/tests/mysqli_field_seek.phpt +++ b/ext/mysqli/tests/mysqli_field_seek.phpt @@ -218,8 +218,8 @@ Warning: mysqli_field_seek(): Invalid field offset in %s on line %d bool(false) bool(false) -Warning: mysqli_field_seek(): Invalid field offset in %s on line %d -bool(false) +Warning: mysqli_field_seek() expects parameter 2 to be integer, float given in %s on line %d +NULL bool(true) object(stdClass)#%d (13) { [%u|b%"name"]=> diff --git a/ext/mysqli/tests/mysqli_get_client_stats.phpt b/ext/mysqli/tests/mysqli_get_client_stats.phpt index a22fc58f53..a61165ae15 100644 --- a/ext/mysqli/tests/mysqli_get_client_stats.phpt +++ b/ext/mysqli/tests/mysqli_get_client_stats.phpt @@ -119,7 +119,7 @@ mysqlnd.collect_memory_statistics=1 mysqli_get_client_stats_assert_eq('result_set_queries', $new_info, $info, $test_counter); /* we need to skip this test in unicode - we send set names utf8 during mysql_connect */ - if (!(version_compare(PHP_VERSION, '5.9.9', '>') == 1)) + if (!(version_compare(PHP_VERSION, '6.0', '==') == 1)) mysqli_get_client_stats_assert_eq('non_result_set_queries', $new_info, $info, $test_counter); mysqli_get_client_stats_assert_eq('buffered_sets', $new_info, $info, $test_counter); mysqli_get_client_stats_assert_eq('unbuffered_sets', $new_info, $info, $test_counter); diff --git a/ext/mysqli/tests/mysqli_get_warnings.phpt b/ext/mysqli/tests/mysqli_get_warnings.phpt index 00548de709..0d5c768ece 100644 --- a/ext/mysqli/tests/mysqli_get_warnings.phpt +++ b/ext/mysqli/tests/mysqli_get_warnings.phpt @@ -129,7 +129,8 @@ if (!$TEST_EXPERIMENTAL) $warning = new mysqli_warning($mysqli); $i = 1; while ($warning->next() && ('' != ($tmp = $warning->message))) { - if ((version_compare(PHP_VERSION, '5.9.9', '>') == 1) && !is_unicode($tmp)) + if ((version_compare(PHP_VERSION, '6.0', '==') == 1) && + !is_unicode($tmp)) printf("[033a] Warning should have been a unicode string, got %s/%s", gettype($tmp), $tmp); $i++; } diff --git a/ext/mysqli/tests/mysqli_info.phpt b/ext/mysqli/tests/mysqli_info.phpt index 6bb5d215e0..a1b8517588 100644 --- a/ext/mysqli/tests/mysqli_info.phpt +++ b/ext/mysqli/tests/mysqli_info.phpt @@ -30,7 +30,8 @@ require_once('skipifconnectfailure.inc'); if (!is_string($tmp = mysqli_info($link)) || ('' == $tmp)) printf("[006] Expecting string/any_non_empty, got %s/%s\n", gettype($tmp), $tmp); - if ((version_compare(PHP_VERSION, '5.9.9', '>') == 1) && !is_unicode($tmp)) + if ((version_compare(PHP_VERSION, '6.0', '==') == 1) && + !is_unicode($tmp)) printf("[007] Expecting unicode, because unicode mode it on. Got binary string\n"); if (!$res = mysqli_query($link, 'INSERT INTO test(id, label) SELECT id + 200, label FROM test')) diff --git a/ext/mysqli/tests/mysqli_query_unicode.phpt b/ext/mysqli/tests/mysqli_query_unicode.phpt index 478ccbd30f..5c33178f3c 100644 --- a/ext/mysqli/tests/mysqli_query_unicode.phpt +++ b/ext/mysqli/tests/mysqli_query_unicode.phpt @@ -88,7 +88,7 @@ mysqli_close($link); /* Trying to test what Ramil suggests in http://bugs.mysql.com/bug.php?id=29576 However, this won't work, because we're lacking MYSQLI_SET_CHARSET_NAME. - if ((version_compare(PHP_VERSION, '5.9.9', '>') == 1)) { + if ((version_compare(PHP_VERSION, '6.0', '==') == 1)) { if (mysqli_get_server_version() > 50002) { @mysqli_query($link, "DROP USER IF EXISTS 'тест'@'%'"); if (TRUE !== mysqli_query($link, "CREATE USER 'тест'@'%'")) { diff --git a/ext/mysqli/tests/mysqli_real_escape_string_gbk.phpt b/ext/mysqli/tests/mysqli_real_escape_string_gbk.phpt index 991d3c345b..53424e6e74 100644 --- a/ext/mysqli/tests/mysqli_real_escape_string_gbk.phpt +++ b/ext/mysqli/tests/mysqli_real_escape_string_gbk.phpt @@ -2,7 +2,7 @@ mysqli_real_escape_string() - gbk --SKIPIF-- <?php -if (version_compare(PHP_VERSION, '5.9.9', '>') == 1) { +if (version_compare(PHP_VERSION, '6.0', '==') == 1) { die('skip set character set not functional with PHP 6 (fomerly PHP 6 && unicode.semantics=On)'); } diff --git a/ext/mysqli/tests/mysqli_real_escape_string_sjis.phpt b/ext/mysqli/tests/mysqli_real_escape_string_sjis.phpt index 2ed2b8bf11..3fb2b7df25 100644 --- a/ext/mysqli/tests/mysqli_real_escape_string_sjis.phpt +++ b/ext/mysqli/tests/mysqli_real_escape_string_sjis.phpt @@ -2,7 +2,7 @@ mysqli_real_escape_string() - sjis --SKIPIF-- <?php -if (version_compare(PHP_VERSION, '5.9.9', '>') == 1) { +if (version_compare(PHP_VERSION, '6.0', '==') == 1) { die('skip set character set not functional with PHP 6 (fomerly PHP 6 && unicode.semantics=On)'); } diff --git a/ext/mysqli/tests/mysqli_result_references.phpt b/ext/mysqli/tests/mysqli_result_references.phpt index 1cf0ffe09a..6d80dc1000 100644 --- a/ext/mysqli/tests/mysqli_result_references.phpt +++ b/ext/mysqli/tests/mysqli_result_references.phpt @@ -85,70 +85,70 @@ array(7) refcount(2){ [0]=> array(2) refcount(1){ [%u|b%"id"]=> - long(1) refcount(1) + long(1) [%u|b%"label"]=> - %unicode|string%(1) "a" refcount(1) + %unicode|string%(1) "a" refcount(%d) } [1]=> array(2) refcount(1){ [%u|b%"id"]=> - long(2) refcount(1) + long(2) [%u|b%"label"]=> - %unicode|string%(1) "b" refcount(1) + %unicode|string%(1) "b" refcount(%d) } [2]=> array(2) refcount(1){ [%u|b%"id"]=> - long(1) refcount(1) + long(1) [%u|b%"label"]=> - %unicode|string%(1) "a" refcount(1) + %unicode|string%(1) "a" refcount(%d) } [3]=> array(2) refcount(1){ [%u|b%"id"]=> - long(2) refcount(1) + long(2) [%u|b%"label"]=> - %unicode|string%(1) "b" refcount(1) + %unicode|string%(1) "b" refcount(%d) } [4]=> array(3) refcount(1){ [%u|b%"id"]=> - &long(3) refcount(2) + &long(3) [%u|b%"label"]=> - %unicode|string%(1) "a" refcount(1) + %unicode|string%(1) "a" refcount(%d) [%u|b%"id2"]=> - &long(3) refcount(2) + &long(3) } [5]=> array(3) refcount(1){ [%u|b%"id"]=> - &long(4) refcount(2) + &long(4) [%u|b%"label"]=> - %unicode|string%(1) "b" refcount(1) + %unicode|string%(1) "b" refcount(%d) [%u|b%"id2"]=> - &long(4) refcount(2) + &long(4) } [6]=> - &object(mysqli_result)#2 (5) refcount(2){ + &object(mysqli_result)#%d (5) refcount(%d){ [%u|b%"current_field"]=> - NULL refcount(1) + NULL [%u|b%"field_count"]=> - NULL refcount(1) + NULL [%u|b%"lengths"]=> - NULL refcount(1) + NULL [%u|b%"num_rows"]=> - NULL refcount(1) + NULL [%u|b%"type"]=> - NULL refcount(1) + NULL } } array(1) refcount(2){ [0]=> array(2) refcount(1){ [%u|b%"id"]=> - %unicode|string%(1) "1" refcount(1) + %unicode|string%(1) "1" refcount(%d) [%u|b%"label"]=> - %unicode|string%(1) "a" refcount(1) + %unicode|string%(1) "a" refcount(%d) } } done! diff --git a/ext/mysqli/tests/mysqli_result_references_mysqlnd.phpt b/ext/mysqli/tests/mysqli_result_references_mysqlnd.phpt index c100c4a29a..60c5491b54 100644 --- a/ext/mysqli/tests/mysqli_result_references_mysqlnd.phpt +++ b/ext/mysqli/tests/mysqli_result_references_mysqlnd.phpt @@ -10,7 +10,7 @@ require_once('connect.inc'); if (!$IS_MYSQLND) die("skip Test for mysqlnd only"); -if ((version_compare(PHP_VERSION, '5.9.9', '>') == 1)) +if ((version_compare(PHP_VERSION, '6.0', '==') == 1)) die("skip (TODO) PHP 6.0 has a difference debug_zval_dump output format"); ?> <?php require_once('skipifemb.inc'); ?> @@ -57,63 +57,63 @@ if ((version_compare(PHP_VERSION, '5.9.9', '>') == 1)) print "done!"; ?> --EXPECTF-- -array(1) refcount(2){ +array(1) refcount(%d){ [0]=> - array(4) refcount(1){ + array(4) refcount(%d){ [%u|b%"row_ref"]=> - &NULL refcount(2) + &NULL [%u|b%"row_copy"]=> array(2) refcount(1){ [%u|b%"id"]=> - %unicode|string%(1) "1" refcount(2) + %unicode|string%(1) "1" refcount(%d) [%u|b%"label"]=> - %unicode|string%(1) "a" refcount(2) + %unicode|string%(1) "a" refcount(%d) } [%u|b%"id_ref"]=> - %unicode|string%(1) "1" refcount(1) + %unicode|string%(1) "1" refcount(%d) [%u|b%"id_copy"]=> - %unicode|string%(1) "1" refcount(1) + %unicode|string%(1) "1" refcount(%d) } } -array(2) refcount(2){ +array(2) refcount(%d){ [0]=> - array(4) refcount(1){ + array(4) refcount(%d){ [%u|b%"row_ref"]=> - &NULL refcount(2) + &NULL [%u|b%"row_copy"]=> - array(2) refcount(1){ + array(2) refcount(%d){ [%u|b%"id"]=> - %unicode|string%(1) "1" refcount(1) + %unicode|string%(1) "1" refcount(%d) [%u|b%"label"]=> - %unicode|string%(1) "a" refcount(1) + %unicode|string%(1) "a" refcount(%d) } [%u|b%"id_ref"]=> - %unicode|string%(1) "1" refcount(1) + %unicode|string%(1) "1" refcount(%d) [%u|b%"id_copy"]=> - %unicode|string%(1) "1" refcount(1) + %unicode|string%(1) "1" refcount(%d) } [1]=> - array(5) refcount(1){ + array(5) refcount(%d){ [%u|b%"row_ref"]=> - &array(2) refcount(2){ + &array(2) refcount(%d){ [%u|b%"id"]=> - &%unicode|string%(1) "2" refcount(2) + &%unicode|string%(1) "2" refcount(%d) [%u|b%"label"]=> - %unicode|string%(1) "b" refcount(2) + %unicode|string%(1) "b" refcount(%d) } [%u|b%"row_copy"]=> - array(2) refcount(1){ + array(2) refcount(%d){ [%u|b%"id"]=> - %unicode|string%(1) "2" refcount(1) + %unicode|string%(1) "2" refcount(%d) [%u|b%"label"]=> - %unicode|string%(1) "b" refcount(2) + %unicode|string%(1) "b" refcount(%d) } [%u|b%"id_ref"]=> - &%unicode|string%(1) "2" refcount(2) + &%unicode|string%(1) "2" refcount(%d) [%u|b%"id_copy"]=> - %unicode|string%(1) "2" refcount(1) + %unicode|string%(1) "2" refcount(%d) [%u|b%"id_copy_mod"]=> - long(2) refcount(1) + long(2) } } done! diff --git a/ext/mysqli/tests/mysqli_result_unclonable.phpt b/ext/mysqli/tests/mysqli_result_unclonable.phpt index 0ecc30b62a..6164197a6c 100644 --- a/ext/mysqli/tests/mysqli_result_unclonable.phpt +++ b/ext/mysqli/tests/mysqli_result_unclonable.phpt @@ -21,4 +21,7 @@ require_once('skipifconnectfailure.inc'); print "done!"; ?> --EXPECTF-- -Fatal error: Trying to clone an uncloneable object of class mysqli_result in %s on line %d
\ No newline at end of file +Fatal error: Uncaught Error: Trying to clone an uncloneable object of class mysqli_result in %s:%d +Stack trace: +#0 {main} + thrown in %s on line %d
\ No newline at end of file diff --git a/ext/mysqli/tests/mysqli_set_charset.phpt b/ext/mysqli/tests/mysqli_set_charset.phpt index 38fe56841b..997af96f94 100644 --- a/ext/mysqli/tests/mysqli_set_charset.phpt +++ b/ext/mysqli/tests/mysqli_set_charset.phpt @@ -6,7 +6,7 @@ require_once('skipif.inc'); require_once('skipifemb.inc'); require_once('skipifconnectfailure.inc'); -if (version_compare(PHP_VERSION, '5.9.9', '>') == 1) { +if (version_compare(PHP_VERSION, '6.0', '==') == 1) { die('skip set character set not functional with PHP 6 (fomerly PHP 6 && unicode.semantics=On)'); } diff --git a/ext/mysqli/tests/mysqli_stmt_bind_param_references.phpt b/ext/mysqli/tests/mysqli_stmt_bind_param_references.phpt index 91cb9d022b..58626be672 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_param_references.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_param_references.phpt @@ -177,7 +177,7 @@ require_once('skipifconnectfailure.inc'); class foo { public $foo; - function foo() { + function __construct() { $this->foo = &$this->bar; } } @@ -204,4 +204,4 @@ require_once('skipifconnectfailure.inc'); require_once("clean_table.inc"); ?> --EXPECTF-- -done!
\ No newline at end of file +done! diff --git a/ext/mysqli/tests/mysqli_stmt_bind_result.phpt b/ext/mysqli/tests/mysqli_stmt_bind_result.phpt index 553e71ab6b..c61cb8efd5 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_result.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_result.phpt @@ -10,7 +10,7 @@ require_once('skipifconnectfailure.inc'); <?php require_once("connect.inc"); - $hint_str_or_unicode = (version_compare(PHP_VERSION, '5.9.9', '>') == 1) ? "unicode":"string"; + $hint_str_or_unicode = (version_compare(PHP_VERSION, '6.0', '==') == 1) ? "unicode":"string"; $tmp = NULL; $link = NULL; @@ -27,7 +27,7 @@ require_once('skipifconnectfailure.inc'); if (!mysqli_stmt_prepare($stmt, "SELECT id, label FROM test ORDER BY id LIMIT 1")) printf("[002a] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); - if (!is_null($tmp = @mysqli_stmt_bind_result($stmt))) + if (!is_null($tmp = mysqli_stmt_bind_result($stmt))) printf("[002b] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); mysqli_stmt_close($stmt); @@ -37,7 +37,7 @@ require_once('skipifconnectfailure.inc'); $label = null; $foo = null; - if (!is_null($tmp = mysqli_stmt_bind_result($stmt))) + if (!is_null($tmp = mysqli_stmt_bind_result($stmt, $id))) printf("[003] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); if (!mysqli_stmt_prepare($stmt, "SELECT id, label FROM test ORDER BY id LIMIT 1")) @@ -320,6 +320,8 @@ require_once('skipifconnectfailure.inc'); require_once("clean_table.inc"); ?> --EXPECTF-- +Warning: mysqli_stmt_bind_result() expects at least 2 parameters, 1 given in %s on line %d + Warning: mysqli_stmt_bind_result(): invalid object or resource mysqli_stmt in %s on line %d @@ -328,4 +330,4 @@ Warning: mysqli_stmt_bind_result(): Number of bind variables doesn't match numbe Warning: mysqli_stmt_bind_result(): Number of bind variables doesn't match number of fields in prepared statement in %s on line %d int(1) %s(1) "a" -done!
\ No newline at end of file +done! diff --git a/ext/mysqli/tests/mysqli_stmt_bind_result_references.phpt b/ext/mysqli/tests/mysqli_stmt_bind_result_references.phpt index ee659d4b4a..b8efec5eca 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_result_references.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_result_references.phpt @@ -194,7 +194,7 @@ require_once('skipifconnectfailure.inc'); unset($bar); unset($id); unset($label_ref); class foo { public $foo; - public function foo() { + public function __construct() { $this->foo = &$this->bar; } } @@ -219,8 +219,8 @@ require_once('skipifconnectfailure.inc'); class mega_bar extends bar { private $id; public $id_ref; - public function mega_bar() { - $this->foo(); + public function __construct() { + parent::__construct(); $this->id_ref = &$this->id; } } @@ -311,4 +311,4 @@ object(mega_bar)#5 (4) { [%u|b%"foo"]=> &%unicode|string%(1) "a" } -done!
\ No newline at end of file +done! diff --git a/ext/mysqli/tests/mysqli_stmt_get_result_seek.phpt b/ext/mysqli/tests/mysqli_stmt_get_result_seek.phpt index ffb655d5fa..31eb574422 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_result_seek.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_result_seek.phpt @@ -67,8 +67,8 @@ if (!function_exists('mysqli_stmt_get_result')) if (false !== ($tmp = $res->data_seek($res->num_rows + 1))) printf("[012] Expecting boolean/false got %s/%s\n", gettype($tmp), $tmp); - if (false !== ($tmp = $res->data_seek(PHP_INT_MAX + 1))) - printf("[013] Expecting boolean/false got %s/%s\n", gettype($tmp), $tmp); + if (NULL !== ($tmp = $res->data_seek(PHP_INT_MAX + 1))) + printf("[013] Expecting NULL got %s/%s\n", gettype($tmp), $tmp); for ($i = 0; $i < 100; $i++) { /* intentionally out of range! */ @@ -118,6 +118,7 @@ if (!function_exists('mysqli_stmt_get_result')) require_once("clean_table.inc"); ?> --EXPECTF-- +Warning: mysqli_result::data_seek() expects parameter 1 to be integer, float given in %s on line %d Warning: mysqli_data_seek(): Couldn't fetch mysqli_result in %s on line %d @@ -126,4 +127,4 @@ Warning: mysqli_result::fetch_array(): Couldn't fetch mysqli_result in %s on lin Warning: mysqli_data_seek(): Couldn't fetch mysqli_result in %s on line %d Warning: mysqli_result::fetch_array(): Couldn't fetch mysqli_result in %s on line %d -done!
\ No newline at end of file +done! diff --git a/ext/mysqli/tests/mysqli_stmt_get_result_types.phpt b/ext/mysqli/tests/mysqli_stmt_get_result_types.phpt index 724a32a787..643e9080c4 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_result_types.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_result_types.phpt @@ -15,7 +15,7 @@ mysqli_stmt_get_result - data types if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); - $hint_str_or_unicode = (version_compare(PHP_VERSION, '5.9.9', '>') == 1) ? 'unicode' : 'string'; + $hint_str_or_unicode = (version_compare(PHP_VERSION, '6.0', '==') == 1) ? 'unicode' : 'string'; function func_mysqli_stmt_get_result($link, $engine, $bind_type, $sql_type, $bind_value, $offset, $type_hint = null) { diff --git a/ext/mysqli/tests/mysqli_stmt_send_long_data.phpt b/ext/mysqli/tests/mysqli_stmt_send_long_data.phpt index 7e2f8603a8..1fc2745511 100644 --- a/ext/mysqli/tests/mysqli_stmt_send_long_data.phpt +++ b/ext/mysqli/tests/mysqli_stmt_send_long_data.phpt @@ -80,8 +80,8 @@ require_once('skipifconnectfailure.inc'); printf("[012] Expecting boolean/false, got %s/%s. [%d] %s\n", gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); - if (false !== ($tmp = @mysqli_stmt_send_long_data($stmt, PHP_INT_MAX + 1, $blob))) - printf("[013] Expecting boolean/false, got %s/%s. [%d] %s\n", + if (NULL !== ($tmp = @mysqli_stmt_send_long_data($stmt, PHP_INT_MAX + 1, $blob))) + printf("[013] Expecting NULL, got %s/%s. [%d] %s\n", gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); if (false !== ($tmp = mysqli_stmt_send_long_data($stmt, 999, $blob))) @@ -132,4 +132,4 @@ require_once('skipifconnectfailure.inc'); ?> --EXPECTF-- Warning: mysqli_stmt_send_long_data(): Invalid parameter number in %s on line %d -done!
\ No newline at end of file +done! diff --git a/ext/mysqli/tests/mysqli_stmt_unclonable.phpt b/ext/mysqli/tests/mysqli_stmt_unclonable.phpt index 57d8d6d6a6..6576c15d90 100644 --- a/ext/mysqli/tests/mysqli_stmt_unclonable.phpt +++ b/ext/mysqli/tests/mysqli_stmt_unclonable.phpt @@ -22,4 +22,7 @@ require_once('skipifconnectfailure.inc'); print "done!"; ?> --EXPECTF-- -Fatal error: Trying to clone an uncloneable object of class mysqli_stmt in %s on line %d
\ No newline at end of file +Fatal error: Uncaught Error: Trying to clone an uncloneable object of class mysqli_stmt in %s:%d +Stack trace: +#0 {main} + thrown in %s on line %d
\ No newline at end of file diff --git a/ext/mysqli/tests/mysqli_store_result_copy.phpt b/ext/mysqli/tests/mysqli_store_result_copy.phpt index 304300459b..cdbccee198 100644 --- a/ext/mysqli/tests/mysqli_store_result_copy.phpt +++ b/ext/mysqli/tests/mysqli_store_result_copy.phpt @@ -75,7 +75,7 @@ mysqlnd.fetch_data_copy=0 printf("No result: %d\n", $no_result); /* implicit free, implicit store */ - /* meta and fetch lenghts code */ + /* meta and fetch lengths code */ if (!$res = mysqli_query($link, "SELECT CONCAT(id, id) AS _c, label FROM test ORDER BY id DESC LIMIT 2")) printf("[011] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); diff --git a/ext/mysqli/tests/mysqli_unclonable.phpt b/ext/mysqli/tests/mysqli_unclonable.phpt index e332b9f24f..f4471bf831 100644 --- a/ext/mysqli/tests/mysqli_unclonable.phpt +++ b/ext/mysqli/tests/mysqli_unclonable.phpt @@ -20,4 +20,7 @@ require_once('skipifconnectfailure.inc'); print "done!"; ?> --EXPECTF-- -Fatal error: Trying to clone an uncloneable object of class mysqli in %s on line %d
\ No newline at end of file +Fatal error: Uncaught Error: Trying to clone an uncloneable object of class mysqli in %s:%d +Stack trace: +#0 {main} + thrown in %s on line %d
\ No newline at end of file diff --git a/ext/mysqli/tests/skipifunicode.inc b/ext/mysqli/tests/skipifunicode.inc index da4dd8e6fd..89258d498e 100644 --- a/ext/mysqli/tests/skipifunicode.inc +++ b/ext/mysqli/tests/skipifunicode.inc @@ -1,5 +1,5 @@ <?php -if (version_compare(PHP_VERSION, '5.9.9', '>') == 1) { +if (version_compare(PHP_VERSION, '6.0', '==') == 1) { die('skip Not functional with PHP 6 (fomerly PHP 6 && unicode.semantics=On)'); } ?> |
