在原始SQL查询Laravel中插入变量

在原始SQL查询Laravel中插入变量,第1张

在原始SQL查询Laravel中插入变量

这似乎是一个简单的PHP变量插值问题。

DB::raw()
想要字面上的 原始 SQL。因此,您需要在传递的SQL字符串中解决几个问题。

  1. 仅当在字符串周围使用双引号时,才会发生PHP变量插值(将变量注入到字符串中)。用单引号将其变为字符串常量。
  2. 如果Author是
    char
    /
    varchar
    ,则SQL语法要求在原始SQL语句中的字符串前后加上引号。查询生成器通常会为您解决这些问题,但是您需要解决它们。

因此,此“固定”版本为:

$x = "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 = '$x'     GROUP BY p.id        ) t        INNER JOIN rates r ON r.digit = t.AvgStyle"        ));

像所有插值一样,如果要插值的变量来自用户输入,则可以打开SQL注入的可能性。从最初的问题尚不清楚这是否是一个问题。

DB::select()
有一个选项,使您可以传递本质上可以防止SQL注入的参数数组。在这种情况下,解决方案将是:

$x = "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 = :author GROUP BY p.id        ) t        INNER JOIN rates r ON r.digit = t.AvgStyle"        ), array('author' => $x)        );


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4899059.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存