为什么这会给我一个MySQL语法错误:
<cfset arguments.where = "platformUrlId='#params.platformUrlId#'">
SELECT *
FROM whatever
WHERE #arguments.where#
Order By #arguments.order#
但这种方法效果很好吗?
<cfset arguments.where = "0=0">
SELECT *
FROM whatever
WHERE #arguments.where#
Order By #arguments.order#
这不是我的参数,因为我将param放在我输入的双胞胎旁边,并且它们匹配...直接传递字符串有效,但是在参数中设置字符串然后使用参数打破它
编辑:错误输出显示platformUrlId=''playstation3''
Coldufsion正在参数名称周围添加''
。怎么样?
答案 0 :(得分:1)
您可以更好地使用cfqueryparam标记,如下所示:
<cfquery>
SELECT *
FROM tbl
WHERE #arguments.colname# = <cfqueryparam value="#arguments.platformUrlId#">
ORDER BY #arguments.order#
</cfquery>
答案 1 :(得分:1)
为了防止当你的变量像“Dexy的Midnight Runniers”那样包含某些内容时出现问题,CF隐含地逃避了CFQuery中的单引号。您可以使用preserveSingleQuotes()来阻止这种情况。
但是,你所做的绝对不是推荐的做法。如果你需要把它写成一个函数,我会做更多的事情,传递一组键/值对,并使用cfQueryParam来防止任何SQL注入。