php - 动态参数的 SQL 注入(inject)预防

标签 php mysql pdo

我有一个有趣的问题:

我有一个通过 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/

相关文章:

php - 将 JSON 数组返回到 Laravel 中的 View

jquery - Ajax Select,使用 select 从数据库中获取数据

php - MySQL创建的线程快速增长

php - 标签页重定向到主页

javascript - highchart mysql json,带有下拉选择条件的值

php - 重命名一个表是另一个表中的外键

mysql - ebean 生成不兼容 mysql 的演化

mysql - MySQL 中用于统计未读消息的子查询

php - PDO 不调用一行的顺序

php - 针对 1000000 多行优化此查询