mysqli_store_result()与mysqli_use_result()

2021/01/14 04:21 · php ·  · 0评论

问题

mysqli::store_result()之间有什么区别mysqli::use_result()

故事

模糊的文档

PHP.net上的文档似乎对两者之间的区别非常含糊。mysqli::use_result()-page不提供任何代码样本,你链接到mysqli::multi_query()页随机寻找他们。在该页面中,给出了以下代码示例(有关完整代码,请参见页面):

/* store first result set */
if ($result = $mysqli->store_result()) {
    while ($row = $result->fetch_row()) {
        printf("%s\n", $row[0]);
    }
    $result->free();
}
/* print divider */
if ($mysqli->more_results()) {
    printf("-----------------\n");
}

mysqli::store_result()-page用途正是相同的代码样本,但有一个例外:

/* store first result set */
if ($result = $mysqli->use_result()) {

是的...store_result变成了use_result请注意,即使上面的评论仍在说“存储”。

更令人困惑

我看了代码示例后,认为:“好的,这是一个别名”。可是等等!该文档提供以下描述:

它们看起来像是两种不同的事物,并且根本没有像别名那样带来。仔细观察,我发现mysqli::use_result()-page的代码示例中还有另一个异常$result->free();变为$result->close();但是,我发现真相的希望不久就破灭了,当时我发现在第二个代码示例的同一页面(过程上等效的)mysqli_free_result($result);上使用了该页面,而不是期望的mysqli_close_result($result);

mysqli::store_result()将从MySQL服务器获取整个结果集,同时mysqli::use_result()将一行一行地获取行。

mysqli::use_result您链接到文档中也提到了这一点

mysqli_use_result()函数不会从数据库传输整个结果集,因此无法使用mysqli_data_seek()之类的函数移至该集中的特定行。要使用此功能,必须使用mysqli_store_result()存储结果集。如果在客户端执行了大量处理,则不应使用mysqli_use_result(),因为这将占用服务器并阻止其他线程更新从中获取数据的任何表。

mysqli::store_result()除非有充分的理由不立即从服务器读取所有行,否则通常可以使用

use_result返回无缓冲的结果。

store_result返回缓冲的结果。

我认为这种阐述可能会帮助人们从支持通过数组或枚举器进行检索的语言中获得帮助。因为这就是区别。

对于.NET,它与GetDirectories(store_results)与EnumerateDirectories(use_results)(以及File / DbResult / CSV解析/ XML解析等效项)相同。

枚举器变量使用较少的(PHP)客户端内存,并可能在当前行处理时在后台异步获取下一行,从而使更多的内存和更多的处理时间在客户端有效。以占用(SQL)Server资源更长的时间为代价(因为结果集尚未完全传输)。

反过来,get / array方法将通过一次阻塞操作来检索数据,从而占用更多的客户端内存以更早地释放DB内存。

就个人而言,除非您确实遇到(客户端)内存问题,否则我将默认使用非枚举器方式。

在.NET中,如果遇到x32进程的2/3 GiB限制,则必须使用Enumerator方法。文件的特定EnumerateLines在这里很重要。对于数据库结果,它不应该从一开始就发生。A 2吉布DB结果要么方式下过滤(做多查询过滤)或含有大量的斑点(你应该加载零碎,甚至让如果可能的话,浏览器通过HTTP处理程序检索)。

本文地址:http://php.askforanswer.com/mysqli_store_resultyumysqli_use_result.html
文章标签: ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!