2015-06-20 100 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