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

Dan*_*nze 5 php prepared-statement

使用的重要性是什么:

$stmt->free_result();
$stmt->close();
Run Code Online (Sandbox Code Playgroud)

在使用这样的准备好的语句进行数据库调用之后:

$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?
Run Code Online (Sandbox Code Playgroud)

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

$stmt->store_result();
Run Code Online (Sandbox Code Playgroud)

像这样:

$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?
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*son 1

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

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

这允许您的应用程序迭代数百万条记录,而无需将所有结果下载到一个块中。

编辑

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

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