我有一个用于过滤的动态查询,现在我需要使用DB :: raw进行排序
$this->query->orderBy(\DB::raw("POSITION(\"$value\" IN $column)", 'asc'))
但是现在这里有一个SQL注入保护问题,如何在不使用$value
的情况下防止$column
和->setBindings
免受SQL注入
我不能使用->setBindings
,因为我有不同数量的过滤器列,具体取决于表格
答案 0 :(得分:3)
准备好的语句无法评估列名,因此您需要使用白名单来防止注入--- Ajust to match your time period datatype
DECLARE @utcTimeStamp datetime2(3) = DATEADD(ms, -1, DATEADD(DAY, 1, CAST(@date AS datetime2(3)))) AT TIME ZONE 'Eastern Standard Time' AT TIME ZONE 'UTC';
。
要防止出现值,可以将其强制为整数或浮点类型,也可以使用可以接受参数数组的orderByRaw:
$column
答案 1 :(得分:1)
您可以使用orderByRaw
来接受绑定数组。
$this->query->orderByRaw('POSITION(? IN ?) asc', [$value, $column]);
答案 2 :(得分:-1)
尝试以下
$orderByQuery = "select * from table order by POSITION(:value IN :column) asc";
$this->query->select($orderByQuery, [
"value" => $value,
"column" => $column
])