PHP mysqli_store_result MySQLi 函数
-
定义和用法
mysqli_store_result - 转移上一次查询返回的结果集 -
版本支持
PHP4 PHP5 PHP7 不支持 支持 支持 -
语法
mysqli_store_result ( mysqli $link [, int $option ] )
迁移 link 参数所指定的连接上的上一次查询返回的结果集, 迁移之后的结果集可以 在 mysqli_data_seek() 函数中使用。 -
参数
参数 必需的 描述 link 是 由mysqli_connect() 或 mysqli_init() 返回的链接标识。 option 否 指定的选项,可以是下列中的某一值: - 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() 函数来转移数量较大的结果集的时候, 释放结果集内存的操作尤为重要。
-
示例
<?php $link = mysqli_connect("localhost", "my_user", "my_password", "world"); /* 检查连接 */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $query = "SELECT CURRENT_USER();"; $query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5"; /* 批量执行查询 */ if (mysqli_multi_query($link, $query)) { do { /* store first result set */ if ($result = mysqli_store_result($link)) { while ($row = mysqli_fetch_row($result)) { printf("%s\n", $row[0]); } mysqli_free_result($result); } /* print divider */ if (mysqli_more_results($link)) { printf("-----------------\n"); } } while (mysqli_next_result($link)); } /* 关闭连接 */ mysqli_close($link);
-
相关函数
mysqli_query() - 对数据库执行一次查询mysqli_use_result() - 启动结果集检索mysqli_store_result() - 转移上一次查询返回的结果集mysqli_next_result() - 为读取 multi_query 执行之后的下一个结果集做准备mysqli_more_results() - 检查批量查询中是否还有查询结果