我正在尝试学习如何使用 PDO,我需要帮助来理解一些东西。
我一直在阅读,使用 PDO 的最大好处之一是它比mysql_*
一遍又一遍地进行类似查询更有效。我需要做一个完全一样的查询,只是绑定的参数每次都会改变(但是查询的结构是一样的)。所以,这是我的问题:
我应该调用PDO::prepare()
一次然后在我的循环调用execute()
中(传递参数数组),还是应该在PDO::preprare()
每次循环运行时调用?
谢谢!
我正在尝试学习如何使用 PDO,我需要帮助来理解一些东西。
我一直在阅读,使用 PDO 的最大好处之一是它比mysql_*
一遍又一遍地进行类似查询更有效。我需要做一个完全一样的查询,只是绑定的参数每次都会改变(但是查询的结构是一样的)。所以,这是我的问题:
我应该调用PDO::prepare()
一次然后在我的循环调用execute()
中(传递参数数组),还是应该在PDO::preprare()
每次循环运行时调用?
谢谢!
就在文档中:
调用 PDO::prepare() 和 PDOStatement::execute() 为将使用不同参数值多次发出的语句通过允许驱动程序协商查询计划的客户端和/或服务器端缓存来优化应用程序的性能和元信息,并通过消除手动引用参数的需要来帮助防止 SQL 注入攻击。
因此,您只需调用一次准备并在循环内调用执行。
文档中的示例:
<?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();
?>