2015-06-20 61 views
1

我有一個有趣的問題:SQL動態注入動態參數

我有一個窗體,通過GET發送,我想保護數據庫。

問題是,有8個可以在表單頁面傳遞參數選擇框,但他們沒有在那裏。

我目前正在檢查是否選擇框發送默認值,如果它不是,即時通訊將其存儲在陣列。即i循環槽式陣列之後以及將所述搜索參數字符串:

$searchString = "WHERE Aktivno = 1"; 
foreach($pretragaArray as $key => $item){ 
    $searchString = $searchString." AND"; 
    $searchString = $searchString." ". $key ." = " . $item; 
} 

在最後,我結束了搜索查詢字符串這樣

WHERE Aktivno = 1 AND IDVrstaOglasa = 1 

WHERE Aktivno = 1 AND IDOpstina = 15 AND IDGrad = 11 AND IDVrstaOglasa = 1 AND Broj_soba = 3 AND IDKategorijaNekretnine = 5 

我使用PDO php類來查詢數據庫。

我的問題是,有沒有辦法可以逃避我所生成這樣的字符串,如果沒有,是否有更好的方法來查詢的WHERE子句與atributes的動態數量的數據庫。

回答

1

您可以生成的參數,這樣的動態數的參數化查詢:

$searchString = "WHERE Aktivno = 1"; 
$params = array(); 
$paramNum = 1; 

foreach($pretragaArray as $key => $item) 
{ 
    $paramName = ':param' . $paramNum++; 
    $searchString = $searchString." AND"; 
    $searchString = $searchString." ". $key ." = " . $paramName; 
    $params[$paramName] = $item; 
} 

$db = new PDO("..."); 
$statement = $db->prepare("SELECT * FROM some_table " . $searchString); 
$statement->execute($params); 
$row = $statement->fetch(); // or fetchAll()... 
+0

感謝您,感謝您的回答,我是能夠修改我的查詢並顯示結果 – iGoogle