Mysqli_result可用性

时间:2014-06-17 00:56:26

标签: php mysql mysqli

关闭产生它的mysqli_result连接后,您仍然可以使用mysqli对象吗?例如,我正在创建一个PHP对象,其方法是打开mysqli连接,执行查询,将结果存储到参数中,然后关闭连接。这会起作用还是我应该将结果fetch_all()放入一个数组然后关闭连接?

我无法在文档或其他网站上找到回答这个问题的内容。也许那是因为它对其他人来说都是显而易见的,但对我来说并非如此。

1 个答案:

答案 0 :(得分:1)

是。默认情况下,mysqli使用选项MYSQLI_STORE_RESULT运行查询,这意味着它将结果集复制到客户端(进入PHP驱动程序的内存)。因此当你" fetch"从mysqli结果来看,您实际上只是循环遍历已经从MySQL服务器完全获取的结果集。如果您关闭连接,驱动程序会保留该数据。

以下是一个快速代码示例:

$con = new mysqli(...);

sleep(10);
/* go run SHOW PROCESSLIST in a MySQL shell to see the connection */

$sql = "SELECT SLEEP(10) FROM test.foo ";
$result = $con->query($sql);
/* observe the query running in SHOW PROCESSLIST */

$con->close();

sleep(10);
/* now go look at SHOW PROCESSLIST to verify the connection is gone */

print_r($result->fetch_all());
/* Hey! I got the data anyway */