在Laravel中保护原始sql查询以防止注入
当不尝试任何SQL注入修复程序时,查询工作正常,没有任何连接问题。只有当试图更改查询以防止注入时,语法才会中断 我正在尝试保护这个原始查询,以防止sql注入 我在文档中看到过(我知道goo'ol php准备的语句) Laravel展示了一个简单的例子,比如:在Laravel中保护原始sql查询以防止注入,sql,laravel,Sql,Laravel,当不尝试任何SQL注入修复程序时,查询工作正常,没有任何连接问题。只有当试图更改查询以防止注入时,语法才会中断 我正在尝试保护这个原始查询,以防止sql注入 我在文档中看到过(我知道goo'ol php准备的语句) Laravel展示了一个简单的例子,比如: $results = DB::select('select * from users where id = :id', ['id' => 1]); 还是这个 $users = DB::select('select * from us
$results = DB::select('select * from users where id = :id', ['id' => 1]);
还是这个
$users = DB::select('select * from users where active = ?', [1]);
我试图在它对应的地方这样做,在where子句中等于$a形式提供的变量,但是所有的尝试都破坏了语法
比如说:
where author = ?, [$ba], or '$ba' or where author = :ba, ['author' => '$ba']
给出语法错误
$ba = 'whatever';
$results =
DB::select(DB::raw("SELECT
t.id, t.AvgStyle, r.RateDesc
FROM (
SELECT
p.id, ROUND(AVG(s.Value)) AS AvgStyle
FROM posts p
INNER JOIN styles s
ON s.post_id = p.id
WHERE author = '$ba'
GROUP BY p.id
) t
INNER JOIN rates r
ON r.digit = t.AvgStyle"
));
多谢各位。
注>问题没有资格获得奖金。总是有人在未经我允许的情况下把它放在我的每个问题上。你可以这样尝试:
$ba = 'whatever';
$results =
DB::select(DB::raw("SELECT
t.id, t.AvgStyle, r.RateDesc
FROM (
SELECT
p.id, ROUND(AVG(s.Value)) AS AvgStyle
FROM posts p
INNER JOIN styles s
ON s.post_id = p.id
WHERE author = ?
GROUP BY p.id
) t
INNER JOIN rates r
ON r.digit = t.AvgStyle"
, )[$ba]); // @everton We just needed to move it one parentheses
这里重要的一点是,如果您有其他参数,您需要尊重顺序。您可以这样尝试:
$ba = 'whatever';
$results =
DB::select(DB::raw("SELECT
t.id, t.AvgStyle, r.RateDesc
FROM (
SELECT
p.id, ROUND(AVG(s.Value)) AS AvgStyle
FROM posts p
INNER JOIN styles s
ON s.post_id = p.id
WHERE author = ?
GROUP BY p.id
) t
INNER JOIN rates r
ON r.digit = t.AvgStyle"
, )[$ba]); // @everton We just needed to move it one parentheses
这里重要的是,如果你有其他参数,你需要尊重顺序。答案与埃弗顿所说的非常接近:只需要往右边加一个括号 即:
, )[$ba]);
答案与埃弗顿所说的非常接近:只需要往右转一个括号 即:
, )[$ba]);
我在尝试该解决方案后得到的错误是>SQLSTATE[HY000]:一般错误:2031(SQL:SELECT QueryException in Connection.php第713行:您使用的是哪个数据库?Mysql?您如何执行此查询?是的,Mysql,但没有SQL注入修复程序的查询工作得非常完美。修复它的语法更改使查询无法运行。我有很多查询正在运行,因此问题是原始SQL的修复程序不是正如sql所期望的那样,smth必须在中。您是否尝试在该查询结束时调用->get()?我将更新我的答案。查看我发布的答案。正如我所怀疑的,您非常接近,只需要在最后一个括号的右边找到一个位置。obrigado尝试该解决方案后得到的错误是>SQLSTATE[HY000]:一般错误:2031(SQL:SELECT QueryException in Connection.php第713行:您使用的是哪个数据库?Mysql?您如何执行此查询?是的,Mysql,但没有SQL注入修复程序的查询工作得非常完美。修复它的语法更改使查询无法运行。我有很多查询正在运行,因此问题是原始SQL的修复程序不是正如sql所期望的那样,smth必须在中。您是否尝试在查询结束时调用->get()?我将更新我的答案。查看我发布的答案。正如我所怀疑的,您非常接近,只需要在最后一个括号的右边一处。Obrigado