Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Laravel中保护原始sql查询以防止注入_Sql_Laravel - Fatal编程技术网

在Laravel中保护原始sql查询以防止注入

在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

当不尝试任何SQL注入修复程序时,查询工作正常,没有任何连接问题。只有当试图更改查询以防止注入时,语法才会中断

我正在尝试保护这个原始查询,以防止sql注入

我在文档中看到过(我知道goo'ol php准备的语句) Laravel展示了一个简单的例子,比如:

$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