3

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

该脚本完美运行:

<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# 

如果我打开脚本并添加任何内容(即返回、选项卡、评论),保存脚本我会收到上述错误。如果我从旧版本恢复脚本,它会再次正常工作。我打开旧的插入一个带输入键的换行符,保存它,然后它再次中断。真正奇怪的部分是,如果我完全删除 cfqueryparam 标签,脚本会再次运行。这发生在我使用此标签的每个脚本上。CF 的最后一次更新是 2017 年 4 月,除非我编辑它们,否则有几个更新的脚本可以工作。我尝试了不同的编辑器,结果相同。我用谷歌搜索了我的屁股,没有结果。有人可以指出我正确的方向吗?

4

2 回答 2

1

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

将 s放在<cfif>查询中会使数据库引擎无法缓存查询。所以我会将它们移出,并移出查询中的条件逻辑。

<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>

无关

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

于 2017-10-25T19:38:16.907 回答
0

我发现了问题,问题是 McAfee scriptscan。我让 IT 人员将其关闭,现在脚本可以正常工作。IT 将其归咎于旧版本的 Windows Server 2008 以及 McAfee Enterprise 的问题。感谢所有的帮助。让某人带您完成所有事情确实很有帮助。

于 2017-10-26T12:18:13.367 回答