mysqli_stmt_get_result 和 mysqli_stmt_store_result 有什么区别?
What is the difference between mysqli_stmt_get_result and mysqli_stmt_store_result?
在 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 内存中。随后 "fetching" 行只是迭代内存中的结果集。这很好,除非您的结果集太大;它可能会超出您的 PHP 内存限制。此函数returns 只有TRUE 或FALSE。您可以从 mysqli 对象或语句对象中调用它。
mysqli_use_result()
不会传输整个结果集。每次获取一行时,它都会单独调用 MySQL 服务器。这样,您的 PHP 内存就不必一次保存整个结果集。您可以处理每一行并将其丢弃。当结果集很大时,这很有用。此函数 returns 一个 mysqli_result
资源。您只能从 mysqli 对象中调用它,而不能从语句对象中调用它,因此它不能用于准备好的语句。
请注意,在客户端 (PHP) 获取所有行之前,您无法获取结果集中的行数。因此,在获取 returns 0 之前尝试读取 mysqli_stmt_num_rows()
,即使您知道结果中应该包含某些内容。为此目的,使用存储结果函数算作获取结果集。
mysqli_stmt_get_result()
是 mysqlnd 驱动程序中较新的方法。此函数 returns 来自准备语句的 mysqli_result
资源。这有助于在不使用 mysqli_stmt_bind_result()
的情况下更轻松地编写提取循环代码,有些人会感到困惑。
mysqli_stmt_get_result()
总是在内部调用存储结果,所以你最好在 PHP 中有足够的内存来保存完整的结果集。鉴于此,如果您使用准备好的语句,我不知道有什么方法可以逐行获取。您只需确保您没有 运行 SQL 具有大量结果集的查询。
老实说,当我使用 PHP 时,我会避免使用 mysqli。我更喜欢 PDO。很多用法更干净,更少混淆。我希望 PHP 在他们弃用 mysql 的同时刚刚弃用 mysqli。或者至少明确声明PDO是首选。
在 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 内存中。随后 "fetching" 行只是迭代内存中的结果集。这很好,除非您的结果集太大;它可能会超出您的 PHP 内存限制。此函数returns 只有TRUE 或FALSE。您可以从 mysqli 对象或语句对象中调用它。
mysqli_use_result()
不会传输整个结果集。每次获取一行时,它都会单独调用 MySQL 服务器。这样,您的 PHP 内存就不必一次保存整个结果集。您可以处理每一行并将其丢弃。当结果集很大时,这很有用。此函数 returns 一个 mysqli_result
资源。您只能从 mysqli 对象中调用它,而不能从语句对象中调用它,因此它不能用于准备好的语句。
请注意,在客户端 (PHP) 获取所有行之前,您无法获取结果集中的行数。因此,在获取 returns 0 之前尝试读取 mysqli_stmt_num_rows()
,即使您知道结果中应该包含某些内容。为此目的,使用存储结果函数算作获取结果集。
mysqli_stmt_get_result()
是 mysqlnd 驱动程序中较新的方法。此函数 returns 来自准备语句的 mysqli_result
资源。这有助于在不使用 mysqli_stmt_bind_result()
的情况下更轻松地编写提取循环代码,有些人会感到困惑。
mysqli_stmt_get_result()
总是在内部调用存储结果,所以你最好在 PHP 中有足够的内存来保存完整的结果集。鉴于此,如果您使用准备好的语句,我不知道有什么方法可以逐行获取。您只需确保您没有 运行 SQL 具有大量结果集的查询。
老实说,当我使用 PHP 时,我会避免使用 mysqli。我更喜欢 PDO。很多用法更干净,更少混淆。我希望 PHP 在他们弃用 mysql 的同时刚刚弃用 mysqli。或者至少明确声明PDO是首选。