首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cfquery cfqueryparam时出现奇怪的ColdFusion 10错误

使用cfquery cfqueryparam时出现奇怪的ColdFusion 10错误
EN

Stack Overflow用户
提问于 2017-10-25 02:34:34
回答 2查看 471关注 0票数 3

我使用的是带有MySQL数据库的ColdFusion 10更新23。当我对使用cfqueryparm的脚本进行更改时,该脚本会导致以下错误消息:“无法确定标签queryparam属性值的类型”。

此脚本可以完美地工作:

代码语言:javascript
复制
<cfquery name="i" datasource="tasktrack">
UPDATE qa_commitments
SET 
    commit_division = <cfqueryparam cfsqltype='cf_sql_integer' value='#trim(commit_division)#'/>,
    commit_source = <cfqueryparam cfsqltype='cf_sql_varchar' value='#ucase(trim(commit_source))#'/>,
    commit_title = <cfqueryparam cfsqltype='cf_sql_varchar' value='#ucase(trim(commit_title))#'/>,
    commit_responsibility = <cfqueryparam cfsqltype='cf_sql_varchar' value='#ucase(trim(commit_responsibility))#'/>,
    <cfif Len(commit_cause)>commit_cause = <cfqueryparam cfsqltype='cf_sql_varchar' value='#commit_cause#'/>
    <cfelse>commit_cause = NULL</cfif>,
    commit_comments = <cfqueryparam cfsqltype='cf_sql_varchar' value='#ucase(trim(PreserveSingleQuotes(commit_comments)))#'/>,
    commit_issue_date = <cfqueryparam cfsqltype='cf_sql_date' value='#commit_issue_date#'/>,
    commit_response_due_date = <cfqueryparam cfsqltype='cf_sql_date' value='#commit_response_due_date#'/>,
    commit_response_compl_date = <cfqueryparam cfsqltype='cf_sql_date' value='#commit_response_compl_date#'/>,
    commit_action_due_date = <cfqueryparam cfsqltype='cf_sql_date' value='#commit_action_due_date#'/>
    <cfif IsDefined('commit_closeing_date')> ,commit_closeing_date = <cfqueryparam cfsqltype='cf_sql_date' value='#commit_closeing_date#'/></cfif>
WHERE ID = #id# 

如果我打开脚本并添加任何内容(例如,回车符、制表符、注释),保存脚本时会收到上面的错误。如果我从旧版本恢复脚本,它又可以正常工作。我打开较老的一个,用enter键插入一个换行符,保存它,然后它再次换行。真正奇怪的是,如果我完全删除cfqueryparam标记,脚本就会再次工作。在我使用这个标记的每个脚本上都会发生这种情况。CF的最后一次更新是在2017年4月,有几个新的脚本可以工作,除非我对它们进行编辑。我尝试过不同的编辑器,结果是一样的。我已经用谷歌搜索了我的臀部,但没有结果。有人能给我指个方向吗?

EN

回答 2

Stack Overflow用户

发布于 2017-10-26 03:38:17

我不能告诉你为什么它坏了,但我可以告诉你我将如何修复它。

<cfif>放在查询中,这样DB引擎就不能缓存查询。因此,我会将它们移出,并移出查询中的条件逻辑。

代码语言:javascript
复制
<cfquery name="i" datasource="tasktrack">
DECLARE @commit_clause varchar(40) = <cfqueryparam cfsqltype='cf_sql_varchar' value='#commit_cause#' null="#IIF(len(commit_clause)1, 0)#"/>
DECLARE @commit_closeing_date date = cfqueryparam cfsqltype='cf_sql_date' value='#commit_closeing_date#' null="#IIF(isDefined(Commit_closeing_date), 0, 1)#"/>.

UPDATE qa_commitments
SET 
    commit_division = <cfqueryparam cfsqltype='cf_sql_integer' value='#trim(commit_division)#'/>,
    commit_source = <cfqueryparam cfsqltype='cf_sql_varchar' value='#ucase(trim(commit_source))#'/>,
    commit_title = <cfqueryparam cfsqltype='cf_sql_varchar' value='#ucase(trim(commit_title))#'/>,
    commit_responsibility = <cfqueryparam cfsqltype='cf_sql_varchar' value='#ucase(trim(commit_responsibility))#'/>,
    commit_cause = @commit_clause,
    commit_comments = <cfqueryparam cfsqltype='cf_sql_varchar' value='#ucase(trim(PreserveSingleQuotes(commit_comments)))#'/>,
    commit_issue_date = <cfqueryparam cfsqltype='cf_sql_date' value='#commit_issue_date#'/>,
    commit_response_due_date = <cfqueryparam cfsqltype='cf_sql_date' value='#commit_response_due_date#'/>,
    commit_response_compl_date = <cfqueryparam cfsqltype='cf_sql_date' value='#commit_response_compl_date#'/>,
    commit_action_due_date = <cfqueryparam cfsqltype='cf_sql_date' value='#commit_action_due_date#'/>,
    commit_closeing_date = @commit_closeing_date
WHERE ID = #id# /* I would fix this too */
</cfquery>

Off topic

我会考虑使用实体。我真的不喜欢一遍又一遍地写这些东西。

票数 1
EN

Stack Overflow用户

发布于 2017-10-26 20:18:13

我找到了问题所在,问题出在McAfee脚本扫描。我让IT人员把它关掉了,现在脚本可以用了。它将其归咎于Windows Server2008的旧版本,以及McAfee企业版的问题。谢谢你的帮助。有人能帮你解决问题,这真的很有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46917690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档