关闭 PDO 语句

dim*_*cas 5 php mysql mysqli pdo prepared-statement

我最近决定从 MySQLi 大跃进到 PDO,关于 PDO 的准备语句有一些困扰我的事情。

在 MySQLi 中,我会编写一个典型的 fetch 查询,如下所示:

$db = new mysqli("localhost", "user", "pass", "mydb");
$sql = "SELECT firstCol, secondCol FROM testTable WHERE thirdCol=?";
$stmt = $db->prepare($sql);
$stmt->bind_param("s", $thirdCol);
$stmt->execute();
while( ($row = $stmt->fetch()) )
{
   //do something
}
$stmt->close();
$db->close();
Run Code Online (Sandbox Code Playgroud)

当然还有适当的错误检查。查询后我总是关闭语句和数据库连接。使用 PDO 时,我通过将数据库处理程序设置为 null 来关闭连接,如下所示:

$db = null;
Run Code Online (Sandbox Code Playgroud)

但是声明呢?我在这里找到了一篇建议使用unset或的帖子closeCursor。哪一个更好?我应该将它设置为null喜欢连接吗?

You*_*nse 5

当然还有适当的错误检查。

我确信错误检查几乎不合适。要检查错误,您必须只设置单个 mysqli 配置选项(以及 PDO)并单独执行特定查询。

查询后我总是关闭语句和数据库连接。

说到数据库连接,万一您不得不在同一个脚本中运行多个查询,那您就大错特错了。因为您必须再次打开连接以运行另一个查询,这会无缘无故地减慢您的应用程序。

使用 PDO 时,我通过将数据库处理程序设置为 null 来关闭连接

就像使用 mysqli 一样,如果您在脚本结束时关闭它,没问题,但没有必要。但是如果你在每次查询后都关闭它,那就错了!

您只需连接一次,然后一直使用该单个连接变量。

至于声明,这取决于你。大多数时间语句变量被覆盖,这使得先前的实例设置为空。当你调用一个函数时,它的所有变量在函数结束时都被设置为空。当 php 脚本结束时,它的所有变量都会再次设置为 null。因此,通常没有什么可担心的。