在进行相同的PDO查询(使用更改参数)时,我是每次调用prepare()还是只调用一次?

时间:2012-07-14 14:43:51

标签: php mysql pdo prepared-statement

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

我一直在读到,使用PDO的最大好处之一是,在一遍又一遍地进行类似查询时,它比mysql_*更有效。我需要进行完全相同的查询,除了绑定参数每次都改变(但查询的结构是相同的)。所以,这是我的问题:

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

谢谢!

1 个答案:

答案 0 :(得分:3)

正确的文档:

  

为将使用不同参数值多次发出的语句调用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