我正在使用带有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月,除非我编辑它们,否则有几个更新的脚本可以使用。 我尝试了不同的编辑器,结果相同。 我搜索了我的屁股没有任何结果。 有人可以指出我正确的方向吗?
答案 0 :(得分:1)
我无法告诉你为什么它会破产,但我可以告诉你我将如何解决它。
将<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>
非主题
我会考虑使用实体。我真的不喜欢一遍又一遍地写这些东西。
答案 1 :(得分:0)
我发现了问题,问题是McAfee scriptscan。我让IT人员关闭它,现在脚本工作了。 IT部门将其归咎于旧版本的Windows Server 2008,并且它与McAfee Enterprise存在问题。谢谢你的帮助。只是让某人引导你完成任务真的很有帮助。