【发布时间】:2016-10-03 18:41:44
【问题描述】:
我在控制器的一个函数中。
所以从表单中,我得到一个变量的值,比如:
$x = "whatever";
然后我需要在 WHERE 语句中嵌入该变量(因此,它的值)。如果我对值进行硬编码,它会带来正确的结果,但我已经尝试了各种方式来插入该变量但没有成功。好吧,假设我设法使用该变量,那么我将不得不研究绑定以避免 sql 注入,但到目前为止,我会说,看看该变量是否可以在查询中使用。
我试过了,双引号,串联。 $vx 。 , 花括号 {$x}, 像这样的 $variable 变量,但在某些情况下会给出语法错误,(连接),或者如果我只是在 author = $x 的地方嵌入这样的变量,它告诉我它可以'找不到名为 $x 的列
$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'
));
【问题讨论】:
-
所以让我们从简单的开始:除非您使用双引号,否则 php 不会进行变量插值。让我们从那个开始。更改您的 sql 语句以使用“SELECT ...”并报告正在发生的任何行为。
-
我看到的第二个明显的事情 --- 作者是 char/varchar 值吗?如果是这样,您的 sql 语法必须是 WHERE author = '$x' 。 RAW 方法的目的是注入原始 sql,所以它不会为你做任何魔术。您必须构建一个可以复制到命令行工具并运行它的字符串。
-
你解决了!请把它作为一个答案来获得你的信任。 6000多点的智商不是白给的。
-
好的,不用担心,很高兴能帮上忙。
-
我很感激,但如果我们不把它作为答案,每个人都会继续检查它,因为它仍然像未解决一样。