2012-03-22 73 views
1

如何使用PDO過濾列?我有以下幾種:簡單的MySQL選擇PDO

$sth = $dbh->query('SELECT * from blog ORDER BY date DESC LIMIT 4'); 

這顯然會返回最後4個結果。我想通過一個名爲category

所以一個特定的列,像多加一個步驟,並且將其過濾:

$sth = $dbh->query('SELECT * from blog WHERE category=NAME-HERE ORDER BY date DESC LIMIT 4'); 

謝謝!

回答

4

我會建議使用預處理語句與命名參數:

$stmt = $dbh->prepare("SELECT * FROM blog WHERE category=:category ORDER BY date DESC LIMIT 4"); 
$stmt->bindParam(':category', $category); 
$stmt->execute(); 

PDO將自動環繞category參數報價,如果它是一個字符串。

$sth = $dbh->query("SELECT * from blog WHERE category='$category' ORDER BY date DESC LIMIT 4"); 
/** OR **/ 
$sth = $dbh->query('SELECT * from blog WHERE category="'.$category.'" ORDER BY date DESC LIMIT 4'); 

注意的是,在上述情況下,你需要圍繞$category可變報價:

如果$category值不是來自不受信任來源的到來,您可以按如下修改代碼因爲你正在構建查詢字符串。

+0

如果'SELECT'不是用戶生成的,是否需要綁定? – 2012-03-22 21:06:21

+1

@Justin:無論如何,你都不需要SQL中':category'的引號。實際上,如果包含它們,':category'將被解釋爲一個文字字符串,而不是一個參數。 – cHao 2012-03-22 21:08:12

+0

@Justinᚅᚔᚈᚄᚒᚔ謝謝! – 2012-03-22 21:14:36