summaryrefslogtreecommitdiff
path: root/ext/mysqli/mysqli_nonapi.c
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2014-06-19 11:10:03 +0800
committerXinchen Hui <laruence@php.net>2014-06-19 11:10:03 +0800
commitb7b5fa111b9966fa7690f9b0ab500747cdf58305 (patch)
treee47a09f0bd87e5ab6e838ab5289ddee8e7bf324f /ext/mysqli/mysqli_nonapi.c
parent27e8e11ff97e9932957b8fd47ddc059f7f08acde (diff)
downloadphp-git-b7b5fa111b9966fa7690f9b0ab500747cdf58305.tar.gz
Fixed MySQLi built with mysqlnd
Diffstat (limited to 'ext/mysqli/mysqli_nonapi.c')
-rw-r--r--ext/mysqli/mysqli_nonapi.c54
1 files changed, 23 insertions, 31 deletions
diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c
index c9f06551ab..96ede5878c 100644
--- a/ext/mysqli/mysqli_nonapi.c
+++ b/ext/mysqli/mysqli_nonapi.c
@@ -365,7 +365,7 @@ PHP_FUNCTION(mysqli_fetch_all)
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 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, "
@@ -399,7 +399,7 @@ PHP_FUNCTION(mysqli_get_connection_stats)
&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);
}
@@ -636,36 +636,34 @@ PHP_FUNCTION(mysqli_query)
/* {{{ mysqlnd_zval_array_to_mysqlnd_array functions */
static int mysqlnd_zval_array_to_mysqlnd_array(zval *in_array, MYSQLND ***out_array TSRMLS_DC)
{
- 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)) {
+ if (Z_TYPE_P(elem) != IS_OBJECT ||
+ !instanceof_function(Z_OBJCE_P(elem), mysqli_link_class_entry TSRMLS_CC)) {
php_error_docref(NULL TSRMLS_CC, 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 TSRMLS_CC, 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 TSRMLS_CC, 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;
}
/* }}} */
@@ -674,32 +672,29 @@ static int mysqlnd_zval_array_to_mysqlnd_array(zval *in_array, MYSQLND ***out_ar
static int mysqlnd_zval_array_from_mysqlnd_array(MYSQLND **in_array, zval *out_array TSRMLS_DC)
{
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 TSRMLS_CC)) {
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 TSRMLS_CC, 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);
}
@@ -707,14 +702,11 @@ 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;
}
@@ -734,7 +726,7 @@ static int mysqlnd_dont_poll_zval_array_from_mysqlnd_array(MYSQLND **in_array, z
mysqli_object *intern = Z_MYSQLI_P(elem);
mysql = (MY_MYSQL *)((MYSQLI_RESOURCE *)intern->ptr)->ptr;
if (mysql->mysql == *p) {
- dest_elem = zend_hash_next_index_insert(Z_ARRAY(proxy), elem);
+ dest_elem = zend_hash_next_index_insert(Z_ARRVAL(proxy), elem);
if (dest_elem) {
zval_add_ref(dest_elem);
}