【问题标题】:Building up a coldfusion query issue with LIKE statement使用 LIKE 语句构建冷融合查询问题
【发布时间】:2010-09-19 12:33:50
【问题描述】:

我正在尝试使用此行构建动态 sql 语句

<cfset SQL = "SELECT url, MONTH(event_date) AS months, YEAR(event_date) AS year, event_date, title from events where title LIKE '%#form.event_name#%' ">

<cfquery name="results" >
#SQL#
</cfquery>

好像like子句有问题。有任何想法吗?我需要转义 % 吗?

谢谢

【问题讨论】:

    标签: mysql coldfusion sql-like cfquery


    【解决方案1】:

    在 CFQUERY 中,ColdFusion 会自动将 #SQL# 中的单引号替换为双引号。

    所以理论上你必须这样写你的查询:

    <cfquery name="results" >
    #PreserveSingleQuotes(SQL)#
    </cfquery>
    

    但是...接受表单变量并在查询中直接使用它而不进行进一步验证是非常危险的。对我来说,这似乎是对 SQL 注入攻击的邀请。

    我宁愿像这样使用&lt;cfqueryparam&gt;

    <cfquery name="results" >
    SELECT url, MONTH(event_date) AS months, YEAR(event_date) AS year, event_date, title 
    from events 
    where title LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#form.event_name#%"> 
    </cfquery>
    

    【讨论】:

    • 另外,如果您需要动态构建查询并且正在运行CF9,您可以使用查询功能。 help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/… 使用这个你可以在查询中插入一个问号来代替你的变量并使用 addParam 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    相关资源
    最近更新 更多