summaryrefslogtreecommitdiff
path: root/ext/mysqli/mysqli_nonapi.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mysqli/mysqli_nonapi.c')
-rw-r--r--ext/mysqli/mysqli_nonapi.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c
index 6ea09b1fc2..30b197d10d 100644
--- a/ext/mysqli/mysqli_nonapi.c
+++ b/ext/mysqli/mysqli_nonapi.c
@@ -431,28 +431,39 @@ PHP_FUNCTION(mysqli_fetch_assoc)
/* }}} */
/* {{{ Fetches all result rows as an associative array, a numeric array, or both */
-#ifdef MYSQLI_USE_MYSQLND
PHP_FUNCTION(mysqli_fetch_all)
{
MYSQL_RES *result;
zval *mysql_result;
- zend_long mode = MYSQLND_FETCH_NUM;
+ zend_long mode = MYSQLI_NUM;
if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|l", &mysql_result, mysqli_result_class_entry, &mode) == FAILURE) {
RETURN_THROWS();
}
MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID);
- if (!mode || (mode & ~MYSQLND_FETCH_BOTH)) {
+ if (!mode || (mode & ~MYSQLI_BOTH)) {
zend_argument_value_error(ERROR_ARG_POS(2), "must be one of MYSQLI_FETCH_NUM, "
"MYSQLI_FETCH_ASSOC, or MYSQLI_FETCH_BOTH");
RETURN_THROWS();
}
- mysqlnd_fetch_all(result, mode, return_value);
+ array_init_size(return_value, mysql_num_rows(result));
+
+ zend_ulong i = 0;
+ do {
+ zval row;
+ php_mysqli_fetch_into_hash_aux(&row, result, mode);
+ if (Z_TYPE(row) != IS_ARRAY) {
+ zval_ptr_dtor_nogc(&row);
+ break;
+ }
+ add_index_zval(return_value, i++, &row);
+ } while (1);
}
/* }}} */
+#ifdef MYSQLI_USE_MYSQLND
/* {{{ Returns statistics about the zval cache */
PHP_FUNCTION(mysqli_get_client_stats)
{