Php/docs/mysqli.store-result
mysqli::store_result
mysqli_store_result
(PHP 5, PHP 7)
mysqli::store_result -- mysqli_store_result — 转移上一次查询返回的结果集
说明
面向对象风格
mysqli::store_result
([ int $option
] ) : mysqli_result
过程化风格
mysqli_store_result
( mysqli $link
[, int $option
] ) : mysqli_result
迁移 link
参数所指定的连接上的上一次查询返回的结果集,
迁移之后的结果集可以
在 mysqli_data_seek() 函数中使用。
参数
link
仅以过程化样式:由mysqli_connect() 或 mysqli_init() 返回的链接标识。
option
指定的选项,可以是下列中的某一值:
Valid options Name Description MYSQLI_STORE_RESULT_COPY_DATA
将结果集从 mysqlnd 的内部缓冲区复制到 PHP 变量中。 默认情况下,mysqlnd 采取一种引用策略尽量避免在内容中复制多份同样的结果集。 例如,对于一个包含了很多行的结果集,每个行中的内容又不是很大,那么复制结果集的过程会导致内存使用率下降, 因为用来保存结果集数据的 PHP 变量可能提前被释放掉。 (此选项仅在使用 mysqlnd 驱动且 PHP 5.6.0 之后可用)。
返回值
成功则返回一个缓冲的结果集对象,失败则返回 false
。
Note:
如果上一查询并不产生结果集(例如,执行了一个 INSERT 语句), 那么 mysqli_store_result() 会返回
false
。 如果读取结果集失败了,也会返回false
。 如何区分是上面哪种情况导致此函数的调用返回了false
? 你可以通过下面的方法来检测: mysqli_error() 返回了非空的字符串, mysqli_errno() 返回了非零值, 或者 mysqli_field_count() 返回了非零值, 都表示发生错误了。 还有一种可能的情况会导致此函数的调用返回false
:上一次查询 mysqli_query() 本身是成功的, 但是由于返回的结果集太大,无法为其分配足够的内存来进行结果集转移。 如果 mysqli_field_count() 函数返回了一个非零值,那么表示 SQL 语句产生了一个非空的结果集。
注释
Note:
执行查询之后, 使用 mysqli_free_result() 函数来释放结果集所占用的内存, 是一个很有用的实战经验。 尤其是当使用 mysqli_store_result() 函数来转移数量较大的结果集的时候, 释放结果集内存的操作尤为重要。