diff options
author | Xinchen Hui <laruence@php.net> | 2014-06-19 11:10:03 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@php.net> | 2014-06-19 11:10:03 +0800 |
commit | b7b5fa111b9966fa7690f9b0ab500747cdf58305 (patch) | |
tree | e47a09f0bd87e5ab6e838ab5289ddee8e7bf324f | |
parent | 27e8e11ff97e9932957b8fd47ddc059f7f08acde (diff) | |
download | php-git-b7b5fa111b9966fa7690f9b0ab500747cdf58305.tar.gz |
Fixed MySQLi built with mysqlnd
-rw-r--r-- | ext/mysqli/mysqli.c | 2 | ||||
-rw-r--r-- | ext/mysqli/mysqli_nonapi.c | 54 | ||||
-rw-r--r-- | ext/mysqli/mysqli_warning.c | 19 | ||||
-rw-r--r-- | ext/mysqlnd/mysqlnd.c | 2 |
4 files changed, 34 insertions, 43 deletions
diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index b99fd767c4..fa376a518a 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -497,7 +497,7 @@ static MYSQLND *mysqli_convert_zv_to_mysqlnd(zval * zv TSRMLS_DC) 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 TSRMLS_CC, E_WARNING, "Couldn't fetch %s", intern->zo.ce->name->val); return NULL; } mysql = (MY_MYSQL *)(my_res->ptr); 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); } diff --git a/ext/mysqli/mysqli_warning.c b/ext/mysqli/mysqli_warning.c index 9b85753dd6..9e1cbbf108 100644 --- a/ext/mysqli/mysqli_warning.c +++ b/ext/mysqli/mysqli_warning.c @@ -106,7 +106,7 @@ MYSQLI_WARNING *php_new_warning(const zval * reason, int errorno TSRMLS_DC) w = (MYSQLI_WARNING *)ecalloc(1, sizeof(MYSQLI_WARNING)); ZVAL_DUP(&w->reason, reason); - convert_to_string(&w->resson); + convert_to_string(&w->reason); //????ZVAL_UTF8_STRINGL(&(w->reason), Z_STRVAL(w->reason), Z_STRLEN(w->reason), ZSTR_AUTOFREE); @@ -123,7 +123,7 @@ MYSQLI_WARNING * php_get_warnings(MYSQLND_CONN_DATA * mysql TSRMLS_DC) { MYSQLI_WARNING *w, *first = NULL, *prev = NULL; MYSQL_RES *result; - zval *row; + zval row; if (mysql->m->query(mysql, "SHOW WARNINGS", 13 TSRMLS_CC)) { return NULL; @@ -135,24 +135,23 @@ MYSQLI_WARNING * php_get_warnings(MYSQLND_CONN_DATA * mysql TSRMLS_DC) 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 */ - entry = zend_hash_get_current_data(Z_ARRVAL_P(row)); + entry = zend_hash_get_current_data(Z_ARRVAL(row)); convert_to_long_ex(entry); errno = Z_LVAL_P(entry); - zend_hash_move_forward(Z_ARRVAL_P(row)); + zend_hash_move_forward(Z_ARRVAL(row)); /* 2. Here comes the reason */ - entry = zend_hash_get_current_data(Z_ARRVAL_P(row)); + entry = zend_hash_get_current_data(Z_ARRVAL(row)); w = php_new_warning(entry, errno TSRMLS_CC); /* diff --git a/ext/mysqlnd/mysqlnd.c b/ext/mysqlnd/mysqlnd.c index a8881f3b1f..4f1587088a 100644 --- a/ext/mysqlnd/mysqlnd.c +++ b/ext/mysqlnd/mysqlnd.c @@ -2729,7 +2729,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, tx_commit_or_rollback)(MYSQLND_CONN_DATA * con char * name_esc = mysqlnd_escape_string_for_tx_name_in_comment(name TSRMLS_CC); query_len = mnd_sprintf(&query, 0, (commit? "COMMIT%s %s":"ROLLBACK%s %s"), - name_esc? name_esc:"", tmp_str.s->val? tmp_str.s->val:""); + name_esc? name_esc:"", tmp_str.s? tmp_str.s->val:""); smart_str_free(&tmp_str); if (name_esc) { mnd_efree(name_esc); |