gpt4 book ai didi

php - 默认使用 mysqli_store_result

转载 作者:行者123 更新时间:2023-11-30 22:16:33 26 4
gpt4 key购买 nike

我一直在阅读 mysqli_store_result 但我不明白为什么这是一个选择加入而不是选择退出。根据手册,我不应该将它用于占用大量内存的操作,但考虑到我一次只能获取 50-100 行文本(通常),我得出的结论是我应该始终使用它,但我必须明确为每个查询调用它。这对我来说似乎很奇怪。我这样说是因为它向我表明我误解了某些事情。

据我了解;如果您读取 100 行并使用 while ($stmt->fetch()) 您实际上是通过网络向 MySQL 发送 100 个 read-next-requests(假设 web 和 DB 在不同的机器上)。如果您使用 mysqli_store_result,您只发送一个请求并在网络服务器上循环结果集。为什么我不总是这样做?我错过了什么?

还有一个子问题:这是否与我的 MySQL 状态变量“handler read next”非常高有关,store_result 会有帮助吗?

最佳答案

why this is an opt-in and not an opt-out.

好吧,我可以尝试回答(或者至少是推测)为什么会这样。

Mysqli 与大多数 PHP 一样,只是对 C 函数的简单包装。太薄了,它自己不会添加任何东西。反过来,底层 C API 仅提供基本功能,将所有改进留给实现。由于您无法“撤消”在客户端获取结果集,因此默认情况下这是一个选择加入似乎是合乎逻辑的。

有趣的是,为什么对于 mysqli_query() 缓冲模式默认打开,但对于准备/执行却不是。

yet I must explicitly call it for every single query.

加油!这是唯一您必须为每个查询调用的东西吗? 调用 bind_param、bind_result、execute() 怎么样?你看,mysqli就是调用最基本的API函数。因此,在某种程度上,调用 store_result() 是合乎逻辑的。

鉴于所有这些,我认为您可以得出的唯一结论是您应该在 mysqli 之上编写包装器,或者您可以使用 PDO,它确实是一个包装器,几乎所有必需的功能都已经实现.

关于php - 默认使用 mysqli_store_result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38087189/

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