我有一个有趣的问题:
我有一个通过 GET 发送的表单,我想保护数据库。
问题是有 8 个带参数的选择框可以在表单中传递到页面,但它们不一定要在那里。
我目前正在检查选择框是否发送默认值,如果不是,我将其存储在数组中。之后我遍历数组并将搜索参数添加到字符串:
$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 子句中的动态属性数。
最佳答案
您可以生成一个带有动态数量参数的参数化查询,如下所示:
$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()...
关于php - 动态参数的 SQL 注入(inject)预防,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30959947/