Dan*_*del 2 coldfusion cfquery cfqueryparam coldfusion-8
假设有一个SQL表 Fruit
id | name
--- ------
1 | 'apples'
2 | 'pears'
3 | 'kiwi'
4 | 'bananas, peaches and plumbs'
Run Code Online (Sandbox Code Playgroud)
鉴于以下查询
<cfquery name="qAllFruit" datasource="#DSN#">
SELECT name FROM Fruit
</cfquery>
<cfquery name="qLeftoverFruit" datasource="#DSN#">
SELECT name FROM Fruit
WHERE name NOT IN (<cfqueryparam CF_SQL_TYPE="CF_SQL_VARCHAR"
value="#ValueList(qAllFruit.name)#"
list="yes" />)
</cfquery>
Run Code Online (Sandbox Code Playgroud)
然后qLeftoverFruit
将错误地返回1行:bananas, peaches and plumbs
因为扩展cfqueryparam
列表被错误地解释:
WHERE name NOT IN ('apples','pears','kiwi','bananas','peaches and plumbs')
Run Code Online (Sandbox Code Playgroud)
有没有办法在仍然使用cfqueryparam
标签时纠正这个问题ValueList
?
更新以下是您可以用来重现此问题的要点:http://gist.github.com/a642878c96b82b21b52c
@Daniel Mendel,我认为问题在于ColdFusion使用的默认分隔符.您的数据中包含','并且CF中的默认分隔符为','顺便提一下.
像这样更改您的查询 -
WHERE name NOT IN ( <cfqueryparam CFSQLType="CF_SQL_VARCHAR"
value="#ValueList(qTags.tag,';' )#"
list="Yes" separator=";" />
)
Run Code Online (Sandbox Code Playgroud)
只需将valueList中的分隔符更改为";" 从默认','并将QueryParam分隔符设置为';'.
归档时间: |
|
查看次数: |
1239 次 |
最近记录: |