2009-09-21 158 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