严格来说,从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);
...
}
Run Code Online (Sandbox Code Playgroud)
所以答案是:从MySQL服务器的角度来看,没有"全部获取"这样的东西.PHP扩展要么获取一行,要么一次获取一行,直到获取结果集中的所有行.
| 归档时间: |
|
| 查看次数: |
3705 次 |
| 最近记录: |