2009-09-21 159 views
30

今天我被告知我应该真的在使用PDO并在我的应用程序中准备好语句。虽然我了解这些好处,但我正在努力了解如何将其实施到我的工作流程中。除了它使代码更清洁之外,我是否应该有一个特定的数据库类,它容纳了所有准备好的语句,或者每次我想要运行查询时都应创建一个?我很难理解什么时候应该使用标准的PDO查询,以及何时应该使用准备好的语句。任何示例,技巧或教程链接将不胜感激。PHP PDO准备语句

回答

31

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(); 
+1

在你的2个例子中,是1比另一个更好? – JasonDavis 2009-09-21 22:11:01

+0

对于简单的查询,很好。但请注意,准备好的语句将为每个值添加一个引号。在第二个例子中,你可以声明一个值是一个数字,另一个值是一个字符串。 (虽然这里没有显示) – 2009-09-21 22:12:57

+0

只取决于你想要用它做什么......如果你想多次使用相同的值,那么你应该使用命名参数。这是因为如果你使用?,它只是按照它们出现的顺序插入它们。如果您使用了命名参数,那么您可以多次使用它们。对于更简单的查询,这些仅仅是更简洁的版本。其他方面没有其他优势。 – BraedenP 2009-09-21 22:19:14