PHP ::: Prepared Statements ::: freeresult()::: close()

时间:2012-01-25 00:45:35

标签: php prepared-statement

使用的重要性:

$stmt->free_result();
$stmt->close();

使用如下准备好的语句进行数据库调用之后:

$mysqli=new mysqli("database", "db", "pass", "user");

$stmt = $mysqli->prepare("SELECT email FROM users WHERE id=? ");
$stmt->bind_param('i',$_SESSION['id']);
$stmt->execute();
$stmt->bind_result($email);
while($stmt->fetch()){
     echo $email;
}
$stmt->free_result(); //why do i need this?
$stmt->close();       //why do i need this?

我问,因为没有它们我没有看到任何明显的性能下降。这些命令通常仅用于在使用以下内容存储结果时使用:

$stmt->store_result();

像这样:

$mysqli=new mysqli("database", "db", "pass", "user");

$stmt = $mysqli->prepare("SELECT email FROM users WHERE id=? ");
$stmt->bind_param('i',$_SESSION['id']);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($email);
while($stmt->fetch()){
     echo $email;
}
$stmt->free_result(); //why do i need this?
$stmt->close();       //why do i need this?

最终问题归结为何时适合使用freeresult()和close()?

1 个答案:

答案 0 :(得分:1)

free_results语句告诉数据库引擎它可以释放结果集。

执行语句时,会创建一个迭代器。客户端(您的应用程序)通过逐个或大块地下载它们来迭代每个结果。

这使您可以在不将所有结果下载到一个块中的情况下迭代数百万条记录。

修改

免费结果将释放客户端内存。如果单个记录非常大并且需要释放内存,则非常有用。

请参阅: http://php.net/manual/en/function.mysql-free-result.php