PDO具有PDO::ATTR_EMULATE_PREPARES控制是否应仅在DB不支持或始终模拟准备语句的选项.但是,它没有提到它是否总是默认模拟它们.
通常人们会认为仿真只在必要时才使用,但因为它是PHP,所以没有什么可以假设只是因为它是理智的......
使用的重要性是什么:
$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()?