gpt4 book ai didi

php - Mysqli fetch_assoc() 循环与 Mysqli fetch_all() 数据库加载?

转载 作者:可可西里 更新时间:2023-11-01 06:37:33 24 4
gpt4 key购买 nike

严格从 MySQL 的角度(数据库性能,而不是 PHP 性能)来看,在检索查询结果时,Mysqli fetch_assoc() 循环与 Mysqli fetch_all() 之间有什么区别?

假设 $result = $qdb->query("SELECT name, id FROM cats");

换句话说,每次额外的 fetch_assoc() 或 fetch_array(MYSQLI_NUM) 迭代是否会导致更多的 MySQL 通信,或者整个查询结果是否已经从 MySQL 一次提取?

换句话说,Mysqli fetch_all() 可以让 MySQL 的生活更轻松吗?

强调一下,我只关心 MySQL 听到和响应的内容,如果有任何不同的话。这不是关于 PHP 性能、为什么一种方法比另一种更好等的问题。此外,这不是 PDO 问题 http://php.net/manual/en/mysqli-result.fetch-all.php

最佳答案

通过阅读代码,mysqli_fetch_assoc() 获取一行。

而 mysqli_fetch_all() 调用 mysqlnd_fetch_all(),它使用循环一次获取一行,直到获取所有行,然后跳出循环。

这里是 mysqlnd 中的相关函数,针对长度进行了编辑:

MYSQLND_METHOD(mysqlnd_res, fetch_all)(MYSQLND_RES * result, unsigned int flags, zval *return_value TSRMLS_DC ZEND_FILE_LINE_DC)
{
...
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);
...
}

所以答案是:从MySQL服务器的角度来看,不存在“全取”这回事。 PHP 扩展要么获取一行,要么一次获取一行,直到获取结果集中的所有行。

关于php - Mysqli fetch_assoc() 循环与 Mysqli fetch_all() 数据库加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19082593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com