我正在尝试学习如何使用PDO,我需要帮助理解一些东西。
我一直在读到,使用PDO的最大好处之一是,在一遍又一遍地进行类似查询时,它比mysql_*
更有效。我需要进行完全相同的查询,除了绑定参数每次都改变(但查询的结构是相同的)。所以,这是我的问题:
我应该一次调用PDO::prepare()
然后调用我的循环调用execute()
(传递参数数组),还是每次循环运行时都应该调用PDO::preprare()
?
谢谢!
答案 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();
?>