0

从查询字符串中收集数据

$cat_id=$_GET['cat_id']; // Actual 

$cat_id="'2','3'"; // Sample data format required

$sql="select * from table_name where cat_id IN ($cat_id)";

foreach ($dbo->query($sql) as $row) {

    $str=$str . "$row[subcat]".",";

}

当我从查询字符串中收集数据并且我必须以这种格式(第 2 行)使用时,我怎样才能在这里防止注入攻击?

4

1 回答 1

0

如果只有数字来自$_GET,那么这是一个简单的解决方法,它强制子集的每个成员类型为$cat_id整数:

$cat_id = implode(
    ',',
    array_map(
        function($v){ return (int)$v; },
        explode(',', $cat_id)
    );
);

它将使用函数拆分$cat_id为数组,然后将每个成员转换为整数,并使用逗号 ( ) 作为分隔符将数组连接回字符串by 。结果将是:。['1','2']explode()array_map(),implode()'1,2'

但是,我想建议通读这个问题。如果您使用 pdo,那么您可能只是尝试使用FIND_IN_SET()函数而不是IN参数绑定。相关问题:

  1. MySQL IN 语句的 PDO 绑定值
  2. PHP PDO:我可以将数组绑定到 IN() 条件吗?
于 2013-10-26T10:40:17.210 回答