summaryrefslogtreecommitdiff
path: root/ext/mysqli
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mysqli')
-rw-r--r--ext/mysqli/config.m446
-rw-r--r--ext/mysqli/config.w324
-rw-r--r--ext/mysqli/mysqli.c559
-rwxr-xr-xext/mysqli/mysqli.dsp120
-rw-r--r--ext/mysqli/mysqli_api.c839
-rw-r--r--ext/mysqli/mysqli_driver.c78
-rw-r--r--ext/mysqli/mysqli_embedded.c6
-rw-r--r--ext/mysqli/mysqli_exception.c27
-rw-r--r--ext/mysqli/mysqli_fe.c2
-rw-r--r--ext/mysqli/mysqli_fe.h2
-rw-r--r--ext/mysqli/mysqli_libmysql.h2
-rw-r--r--ext/mysqli/mysqli_mysqlnd.h2
-rw-r--r--ext/mysqli/mysqli_nonapi.c406
-rw-r--r--ext/mysqli/mysqli_priv.h36
-rw-r--r--ext/mysqli/mysqli_prop.c322
-rw-r--r--ext/mysqli/mysqli_report.c16
-rw-r--r--ext/mysqli/mysqli_result_iterator.c63
-rw-r--r--ext/mysqli/mysqli_warning.c142
-rw-r--r--ext/mysqli/package.xml1
-rw-r--r--ext/mysqli/php_mysqli.h5
-rw-r--r--ext/mysqli/php_mysqli_structs.h114
-rw-r--r--ext/mysqli/tests/045.phpt2
-rw-r--r--ext/mysqli/tests/065.phpt2
-rw-r--r--ext/mysqli/tests/bug33491.phpt8
-rw-r--r--ext/mysqli/tests/bug35517.phpt3
-rw-r--r--ext/mysqli/tests/bug37090.phpt2
-rw-r--r--ext/mysqli/tests/bug38003.phpt5
-rw-r--r--ext/mysqli/tests/bug67839.phpt2
-rw-r--r--ext/mysqli/tests/connect.inc4
-rw-r--r--ext/mysqli/tests/local_infile_tools.inc2
-rw-r--r--ext/mysqli/tests/mysqli_change_user_new.phpt2
-rw-r--r--ext/mysqli/tests/mysqli_change_user_set_names.phpt2
-rw-r--r--ext/mysqli/tests/mysqli_character_set.phpt3
-rw-r--r--ext/mysqli/tests/mysqli_class_mysqli_properties_no_conn.phpt8
-rw-r--r--ext/mysqli/tests/mysqli_class_mysqli_result_interface.phpt2
-rw-r--r--ext/mysqli/tests/mysqli_driver_unclonable.phpt5
-rw-r--r--ext/mysqli/tests/mysqli_error_unicode.phpt2
-rw-r--r--ext/mysqli/tests/mysqli_fetch_object.phpt9
-rw-r--r--ext/mysqli/tests/mysqli_fetch_object_no_constructor.phpt5
-rw-r--r--ext/mysqli/tests/mysqli_fetch_object_oo.phpt44
-rw-r--r--ext/mysqli/tests/mysqli_field_seek.phpt4
-rw-r--r--ext/mysqli/tests/mysqli_get_client_stats.phpt2
-rw-r--r--ext/mysqli/tests/mysqli_get_warnings.phpt3
-rw-r--r--ext/mysqli/tests/mysqli_info.phpt3
-rw-r--r--ext/mysqli/tests/mysqli_query_unicode.phpt2
-rw-r--r--ext/mysqli/tests/mysqli_real_escape_string_gbk.phpt2
-rw-r--r--ext/mysqli/tests/mysqli_real_escape_string_sjis.phpt2
-rw-r--r--ext/mysqli/tests/mysqli_result_references.phpt44
-rw-r--r--ext/mysqli/tests/mysqli_result_references_mysqlnd.phpt52
-rw-r--r--ext/mysqli/tests/mysqli_result_unclonable.phpt5
-rw-r--r--ext/mysqli/tests/mysqli_set_charset.phpt2
-rw-r--r--ext/mysqli/tests/mysqli_stmt_bind_param_references.phpt4
-rw-r--r--ext/mysqli/tests/mysqli_stmt_bind_result.phpt10
-rw-r--r--ext/mysqli/tests/mysqli_stmt_bind_result_references.phpt8
-rw-r--r--ext/mysqli/tests/mysqli_stmt_get_result_seek.phpt7
-rw-r--r--ext/mysqli/tests/mysqli_stmt_get_result_types.phpt2
-rw-r--r--ext/mysqli/tests/mysqli_stmt_send_long_data.phpt6
-rw-r--r--ext/mysqli/tests/mysqli_stmt_unclonable.phpt5
-rw-r--r--ext/mysqli/tests/mysqli_store_result_copy.phpt2
-rw-r--r--ext/mysqli/tests/mysqli_unclonable.phpt5
-rw-r--r--ext/mysqli/tests/skipifunicode.inc2
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(&params[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(&params[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, &param_nr, &data, &data_len) == FAILURE) {
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ols", &mysql_stmt, mysqli_stmt_class_entry, &param_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)');
}
?>