2013-05-10 26 views
0

我最近開始使用php PDO來防止SQL注入,雖然我的語句有問題,但它會根據我通過URL傳遞的參數更改頁面結果。我正在努力的部分是,如何在URL的cat_id添加到我的執行數組時,如何添加$_GET['cat_id']。這裏有一個工作版本,但顯然很容易SQL注入,預先感謝任何幫助!具有不同參數計數的PHP PDO語句

PHP

$and = ''; 
if (isset($_GET['cat_id'])) { 
    $and = "AND art_cat_id = ".$_GET['cat_id']; 
} 

$statement_article = $db->prepare("SELECT * FROM app_articles WHERE art_sta_id = :art_sta_id $and ORDER BY art_date DESC"); 

$statement_article->setFetchMode(PDO::FETCH_ASSOC); 

$statement_article->execute(array(':art_sta_id' => "1")); 

這裏就是我試過,但如果在URL中有cat_id失敗

PHP

$and = ''; 
if (isset($_GET['cat_id'])) { 
    $and = "AND art_cat_id = :cat_id"; 
} 


$statement_article = $db->prepare("SELECT * FROM app_articles WHERE art_sta_id = :art_sta_id $and ORDER BY art_date DESC"); 

$statement_article->setFetchMode(PDO::FETCH_ASSOC); 

$statement_article->execute(array(':art_sta_id' => "1",':cat_id' => $_GET['cat_id'])); 
+0

「這是我所嘗試過的,但是如果url中沒有cat_id,它就會失敗」---所以如果URL中沒有這樣的話,請不要將它傳遞給execute()方法 – zerkms 2013-05-10 02:46:08

回答

2

調整參數數組有一個時cat_id:

$and = ''; 
$params = array(':art_sta_id' => "1"); 

if (isset($_GET['cat_id'])) 
{ 
    $and = "AND art_cat_id = :cat_id" 
    $params[':cat_id'] = $_GET['cat_id']; 
} 

$statement_article = $db->prepare("SELECT * FROM app_articles WHERE art_sta_id = :art_sta_id $and ORDER BY art_date DESC"); 

$statement_article->setFetchMode(PDO::FETCH_ASSOC); 

$statement_article->execute($params); 
+0

真棒謝謝非常多,我應該能夠弄清楚,我剛纔編了好幾個小時,現在哈哈哈非常感謝! – 2013-05-10 02:48:04