在php文档中,它说:
mysqli_stmt_store_result - 从准备好的语句传输结果集。
mysqli_stmt_get_result - 从准备好的语句获取结果集。
我不清楚它们之间的区别,有人可以详细解释一下吗?我看到mysqli_stmt_get_result与mysqli_fetch_assoc一起使用。但我仍然不确定何时使用一个而不是另一个。
谢谢。
在php文档中,它说:
mysqli_stmt_store_result - 从准备好的语句传输结果集。
mysqli_stmt_get_result - 从准备好的语句获取结果集。
我不清楚它们之间的区别,有人可以详细解释一下吗?我看到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是首选。
mysqli_use_result()
,这让我有点困惑。这似乎不是 OP 想要的。 - Dharman