MySQL中的语法错误

时间:2010-09-11 18:18:38

标签: mysql coldfusion

为什么这会给我一个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正在参数名称周围添加''。怎么样?

2 个答案:

答案 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注入。