我在控制器的函数中。
因此,从表单中,我得到了一个变量的值,说:
$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变量插值问题。
DB::raw()
想要字面上的 原始 SQL。因此,您需要在传递的SQL字符串中解决几个问题。
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)
);
我使用Laravel创建一个简单的REST服务,将一个点几何图形和另外两个字符串值一起插入到PostgreSQL(用PostGIS扩展)表中。由于雄辩(据我所知)不支持PostGIS函数,我使用的是原始的SQL查询。 我的控制器如下所示: 通过请求发送的值是: 名称:Lidl 商店:便利 geom: {“type”:“Point”,“坐标”:[18.126712,42.643304],“crs”:
在用户模型中,我定义了关系: 它返回如何获得包括参数的完整查询? 我还定义了与post模型的关系: 如何使用参数查看完整的关系查询?
在模型查询API不够用的情况下,你可以使用原始的sql语句。django提供两种方法使用原始sql进行查询:一种是使用Manager.raw()方法,进行原始查询并返回模型实例;另一种是完全避开模型层,直接执行自定义的sql语句。 警告 编写原始的sql语句时,应该格外小心。每次使用的时候,都要确保转义了参数中的任何控制字符,以防受到sql注入攻击。更多信息请参阅防止sql注入。 进行原始查询 r
问题内容: 我可以在SQL Server 2008的Function中编写插入查询吗?如果尝试,会在函数中收到无效使用副作用运算符’INSERT’的错误。请帮帮我。但我希望它是一个函数,而不是存储过程 问题答案: 从这里引用: 用户定义的函数不能用于修改基表信息。DML语句INSERT,UPDATE和DELETE不能在基表上使用。 因此,您无法在函数中执行INSERT。 您可能想解释为什么不想使用
问题内容: 在维基节点mysql的,我注意到变量(样)插入SQL查询两种不同的方式,一种是通过在查询字符串中间插入一个变量,另一种方式是通过将在查询字符串,并在下一个参数的数组中定义这些值。查询中替换的值将被转义。 有什么区别?什么时候应该在另一个上使用?(如果我们希望表名是一个变量,是否应该将其转义?) 维基密码 Wiki链接 :https : //github.com/felixge/node
我正在尝试使用sqlalchemy执行原始sql查询,并想知道什么是“正确”的方法。 我的查询如下(目前): 我不喜欢的是字符串格式和缺乏任何参数处理(你好music_volume引号:-D)。 我试图遵循这个答案: 如何在SQLAlchemy flask应用程序中执行原始SQL 应用我读到的内容后,我的代码片段如下所示: 然而,我得到的错误,mv和ml是不能识别的参数。 如果我把我的代码片段改成