php - mysqli_stmt_get_result 和 mysqli_stmt_store_result 之间有什么区别?

标签 php mysql mysqli

在 php 文档中它说:

mysqli_stmt_store_result — Transfers a result set from a prepared statement.

<小时/>

mysqli_stmt_get_result — Gets a result set from a prepared statement.

我不太清楚它们之间的区别,有人可以详细说明一下吗? 我见过 mysqli_stmt_get_result 与 mysqli_fetch_assoc 结合使用。但我仍然不确定何时使用其中一种而不是另一种。

谢谢。

最佳答案

mysqli_stmt_store_result()将结果集的所有行传输到 PHP 内存中。随后“获取”行只是迭代内存中的结果集。除非你的结果集太大,否则这很好;它可能超出您的 PHP 内存限制。该函数仅返回 TRUE 或 FALSE。您可以从 mysqli 对象或语句对象调用它。

mysqli_use_result()不传输整个结果集。每次获取一行时,它都会单独调用 MySQL 服务器。这样,您的 PHP 内存就不必一次保存整个结果集。您可以处理每一行并丢弃它。当结果集很大时这很有用。该函数返回 mysqli_result资源。您只能从 mysqli 对象调用它,而不能从语句对象调用它,因此它不能用于准备好的语句。

请注意,在客户端 (PHP) 获取所有行之前,您无法获取结果集中的行数。所以尝试阅读mysqli_stmt_num_rows()在获取之前返回 0,即使您知道结果中应该包含某些内容。使用存储结果函数算作为此目的获取结果集。

mysqli_stmt_get_result()是 mysqlnd 驱动程序中较新的方法。该函数返回 mysqli_result来自准备好的声明的资源。这有助于更轻松地编写提取循环代码,而无需使用 mysqli_stmt_bind_result() ,有些人觉得令人困惑。

mysqli_stmt_get_result()始终在内部调用 store-result,因此 PHP 中最好有足够的内存来保存完整的结果集。鉴于此,如果您使用准备好的语句,我不知道有什么方法可以进行逐行提取。您只需确保不运行具有大型结果集的 SQL 查询即可。

老实说,当我使用 PHP 时,我避免使用 mysqli。我更喜欢PDO。很多用法更干净,更少困惑。我希望 PHP 在弃用 mysql 的同时就弃用了 mysqli。或者至少明确声明 PDO 是首选。

关于php - mysqli_stmt_get_result 和 mysqli_stmt_store_result 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60710601/

相关文章:

mysql - 未定义方法 `+@' 为 nil :NilClass rails after moving to mysql

php - MultyQuery 在 phpmyadmin 中工作,在 Mysqli 中不工作,在其他服务器上工作

php - 使用 INSERT 和 WHERE 进行 MySQLi 查询,可能吗?

javascript - 在一定时间后随机更改 wordpress 标题图片

php - mysql 连接出现不推荐错误

java - wordpress servlet 映射不工作

php - 准备好的语句错误

php - 无效参数编号 : number of bound variables does not match number of tokens - php error

mysql - 基于递归的SQL语句

php - mysql/php 标签的最佳性能