【发布时间】:2017-06-01 07:33:00
【问题描述】:
当mysqli_query 被执行时,PHP 从数据库(MySQL)接收结果集,据我所知,它是一个对象(mysqli_result 类)。
这个 mysqli_result 类是否在其属性中携带来自数据库的实际数据?
只是想知道结果在哪里退出......
【问题讨论】:
当mysqli_query 被执行时,PHP 从数据库(MySQL)接收结果集,据我所知,它是一个对象(mysqli_result 类)。
这个 mysqli_result 类是否在其属性中携带来自数据库的实际数据?
只是想知道结果在哪里退出......
【问题讨论】:
这个 mysqli_result 类是否在其属性中携带来自数据库的实际数据?
没有。
它只携带一个到 internal 结果集的链接,该链接无法直接访问,但只能通过随后调用 mysqli_result::fetch_* 方法来访问。
结果存在于Mysqli模块内部分配的内存中。它仍然在 PHP 端,但无法直接访问,但 it is occupying the memory available for PHP script(这是我关于 PDO 的文章,但它也适用于 mysqli)。
唯一的例外是unbuffered query。对于这样的查询,PHP 端没有存储结果集,而是直接从数据库中获取结果。
【讨论】:
有两种类型的查询。缓冲和非缓冲。使用无缓冲查询时,数据根本不存储在 PHP 内存中。
使用缓冲查询时,客户端库会提前从 MySQL 服务器获取数据。 Mysqli 可以使用两个客户端库:libmysql 和 mysqlnd。
当使用 libmysqlclient 时,数据由该客户端存储在内存中。它不存储在 PHP 内存中。
当使用mysqlnd(原生PHP扩展)时,数据由mysqlnd内部存储在PHP内存中。
可以使用mysqli_result 类的方法访问缓冲数据,也可以使用mysqli_fetch_all 将其复制到数组中。
Mysqli 根本不存储数据!如果数据被缓冲,它只会由客户端库存储在 PHP 内存中。
【讨论】: