在php文档中,它说:
mysqli_stmt_store_result -从准备好的语句中传输结果集。
mysqli_stmt_get_result -从准备好的语句中获取结果集。
我不清楚他们之间的区别,谁能详细说明一下吗?我见过mysqli_stmt_get_result和mysqli_fetch_assoc一起使用。但我还是不知道什么时候该用一种而不是另一种。
谢谢。
发布于 2020-03-16 18:25:01
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()的情况下编写fetch循环代码,有些人对此感到困惑。
mysqli_stmt_get_result()总是在内部调用存储结果,所以最好在PHP中有足够的内存来保存完整的结果集。在这种情况下,如果您使用预先准备好的语句,我不知道有任何方法可以逐行获取。您只需确保不运行具有大型结果集的SQL查询。
老实说,我在使用PHP时避免使用mysqli。我更喜欢PDO。很多用法更干净,也不那么让人困惑。我希望PHP在拒绝mysqli的同时也反对mysqli。或者至少明确声明PDO是首选的。
https://stackoverflow.com/questions/60710601
复制相似问题