mysqli::store_result

mysqli_store_result

(PHP 5, PHP 7, PHP 8)

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() 函数中使用。

参数

mysql

仅以过程化样式:由mysqli_connect()mysqli_init() 返回的 mysqli 对象。

option

指定的选项,可以是下列中的某一值:

Valid options
Name Description
MYSQLI_STORE_RESULT_COPY_DATA 将结果集从 mysqlnd 的内部缓冲区复制到 PHP 变量中。 默认情况下,mysqlnd 采取一种引用策略尽量避免在内容中复制多份同样的结果集。 例如,对于一个包含了很多行的结果集,每个行中的内容又不是很大,那么复制结果集的过程会导致内存使用率下降, 因为用来保存结果集数据的 PHP 变量可能提前被释放掉。 (此选项仅在使用 mysqlnd 驱动且 PHP 5.6.0 之后可用)。

返回值

成功则返回一个缓冲的结果集对象,失败则返回 false

注意:

如果上一查询并不产生结果集(例如,执行了一个 INSERT 语句), 那么 mysqli_store_result() 会返回 false。 如果读取结果集失败了,也会返回 false。 如何区分是上面哪种情况导致此函数的调用返回了 false? 你可以通过下面的方法来检测: mysqli_error() 返回了非空的字符串, mysqli_errno() 返回了非零值, 或者 mysqli_field_count() 返回了非零值, 都表示发生错误了。 还有一种可能的情况会导致此函数的调用返回 false:上一次查询 mysqli_query() 本身是成功的, 但是由于返回的结果集太大,无法为其分配足够的内存来进行结果集转移。 如果 mysqli_field_count() 函数返回了一个非零值,那么表示 SQL 语句产生了一个非空的结果集。

注释

注意:

执行查询之后, 使用 mysqli_free_result() 函数来释放结果集所占用的内存, 是一个很有用的实战经验。 尤其是当使用 mysqli_store_result() 函数来转移数量较大的结果集的时候, 释放结果集内存的操作尤为重要。

范例

See mysqli_multi_query().

参见