PHP PDO准备语句
问题描述:
今天我被告知我应该真的在使用PDO并在我的应用程序中准备好语句。虽然我了解这些好处,但我正在努力了解如何将其实施到我的工作流程中。除了它使代码更清洁之外,我是否应该有一个特定的数据库类,它容纳了所有准备好的语句,或者每次我想要运行查询时都应创建一个?我很难理解什么时候应该使用标准的PDO查询,以及何时应该使用准备好的语句。任何示例,技巧或教程链接将不胜感激。PHP PDO准备语句
答
pdo::prepare()文档有两个很好的例子。
我已经将它们包括在内并简化了一下。
此人使用?
参数。 $dbh
基本上是一个PDO对象。你正在做的是将150
和'red'
的值分别放入第一个和第二个问号。
/* Execute a prepared statement by passing an array of values */
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->execute(array(150, 'red'));
$red = $sth->fetchAll();
这一个使用命名参数,有点复杂。
/* 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();
在你的2个例子中,是1比另一个更好? – JasonDavis 2009-09-21 22:11:01
对于简单的查询,很好。但请注意,准备好的语句将为每个值添加一个引号。在第二个例子中,你可以声明一个值是一个数字,另一个值是一个字符串。 (虽然这里没有显示) – 2009-09-21 22:12:57
只取决于你想要用它做什么......如果你想多次使用相同的值,那么你应该使用命名参数。这是因为如果你使用?,它只是按照它们出现的顺序插入它们。如果您使用了命名参数,那么您可以多次使用它们。对于更简单的查询,这些仅仅是更简洁的版本。其他方面没有其他优势。 – BraedenP 2009-09-21 22:19:14