当进行相同的PDO查询(参数不断变化)时,我是每次调用prepare(),还是只调用一次


When making the same PDO query (with changing parameters), do I call prepare() every time, or just once?

我正在努力学习如何使用PDO,我需要帮助理解一些东西。

我一直读到使用PDO的最大好处之一是,当一次又一次地进行类似的查询时,它比mysql_*效率高得多。我需要创建一个完全相同的查询,只是绑定参数每次都会更改(但查询的结构是相同的)。所以,我的问题是:

我应该调用PDO::prepare()一次,然后在循环内部调用execute()(传递参数数组),还是每次循环运行时都调用PDO::preprare()

谢谢!

直接出文档:

为将多次发出的具有不同参数值的语句调用PDO::prepare()和PDOStatement::execute()可以通过允许驱动程序协商查询计划和元信息的客户端和/或服务器端缓存来优化应用程序的性能,并通过消除手动引用参数的需要来帮助防止SQL注入攻击。

所以您只调用prepare一次,并在循环中调用execute。

文档外示例:

<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();
$sth->execute(array(':calories' => 175, ':colour' => 'yellow'));
$yellow = $sth->fetchAll();
?>

http://www.php.net/manual/de/pdo.prepare.php