andrey Mon, 09 Aug 2010 17:29:30 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=302045
Log: Fix Request #52302 mysqli_fetch_all does not work with MYSQLI_USE_RESULT Bug: http://bugs.php.net/52302 (Assigned) mysqli_fetch_all does not work with MYSQLI_USE_RESULT Changed paths: U php/php-src/branches/PHP_5_3/NEWS U php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_result.c U php/php-src/trunk/ext/mysqlnd/mysqlnd_result.c Modified: php/php-src/branches/PHP_5_3/NEWS =================================================================== --- php/php-src/branches/PHP_5_3/NEWS 2010-08-09 17:16:43 UTC (rev 302044) +++ php/php-src/branches/PHP_5_3/NEWS 2010-08-09 17:29:30 UTC (rev 302045) @@ -13,6 +13,8 @@ empty). (Felipe) - Fixed bug #52436 (Compile error if systems do not have stdint.h) (Sriram Natarajan) +- Fixed bug #52302 (mysqli_fetch_all does not work with MYSQLI_USE_RESULT). + (Andrey). - Fixed bug #51610 (Using oci_connect causes PHP to take a long time to exit). Requires Oracle bug fix 9891199 for this patch to have an effect. (Oracle Corp.) Modified: php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_result.c =================================================================== --- php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_result.c 2010-08-09 17:16:43 UTC (rev 302044) +++ php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_result.c 2010-08-09 17:29:30 UTC (rev 302045) @@ -1567,8 +1567,7 @@ DBG_ENTER("mysqlnd_res::fetch_all"); DBG_INF_FMT("flags=%u", flags); - /* mysqlnd_res::fetch_all works with buffered resultsets only */ - if (result->unbuf || (!result->unbuf && !set)) { + if ((!result->unbuf && !set)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "fetch_all can be used only with buffered sets"); if (result->conn) { SET_CLIENT_ERROR(result->conn->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, "fetch_all can be used only with buffered sets"); @@ -1577,19 +1576,17 @@ DBG_VOID_RETURN; } - mysqlnd_array_init(return_value, (unsigned int) set->row_count); + mysqlnd_array_init(return_value, (unsigned int) set? set->row_count : 4); /* 4 is a magic value */ - if (!set->row_count || !set->data_cursor || set->data_cursor >= set->data + set->row_count) { - DBG_VOID_RETURN; - } - - while (set->data_cursor && - (set->data_cursor - set->data) < (set->row_count * result->meta->field_count)) - { + do { MAKE_STD_ZVAL(row); mysqlnd_fetch_into(result, flags, row, MYSQLND_MYSQLI); + if (Z_TYPE_P(row) != IS_ARRAY) { + zval_ptr_dtor(&row); + break; + } add_index_zval(return_value, i++, row); - } + } while (1); DBG_VOID_RETURN; } Modified: php/php-src/trunk/ext/mysqlnd/mysqlnd_result.c =================================================================== --- php/php-src/trunk/ext/mysqlnd/mysqlnd_result.c 2010-08-09 17:16:43 UTC (rev 302044) +++ php/php-src/trunk/ext/mysqlnd/mysqlnd_result.c 2010-08-09 17:29:30 UTC (rev 302045) @@ -1567,8 +1567,7 @@ DBG_ENTER("mysqlnd_res::fetch_all"); DBG_INF_FMT("flags=%u", flags); - /* mysqlnd_res::fetch_all works with buffered resultsets only */ - if (result->unbuf || (!result->unbuf && !set)) { + if ((!result->unbuf && !set)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "fetch_all can be used only with buffered sets"); if (result->conn) { SET_CLIENT_ERROR(result->conn->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, "fetch_all can be used only with buffered sets"); @@ -1577,19 +1576,17 @@ DBG_VOID_RETURN; } - mysqlnd_array_init(return_value, (unsigned int) set->row_count); + mysqlnd_array_init(return_value, (unsigned int) set? set->row_count : 4); /* 4 is a magic value */ - if (!set->row_count || !set->data_cursor || set->data_cursor >= set->data + set->row_count) { - DBG_VOID_RETURN; - } - - while (set->data_cursor && - (set->data_cursor - set->data) < (set->row_count * result->meta->field_count)) - { + do { MAKE_STD_ZVAL(row); mysqlnd_fetch_into(result, flags, row, MYSQLND_MYSQLI); + if (Z_TYPE_P(row) != IS_ARRAY) { + zval_ptr_dtor(&row); + break; + } add_index_zval(return_value, i++, row); - } + } while (1); DBG_VOID_RETURN; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php