有好几次我创建了一个 cfquery 并且没有充分的理由,它不起作用。例如,我最近有一个这样的查询:
<cfquery name="get_projects" datasource="#application.dsn#">
SELECT *
FROM projects
WHERE project_id = <cfqueryparam cfsqltype="cf_sql_integer" value="#project_id#">
<cfif start_date NEQ "">
AND project_start_date = <cfqueryparam cfsqltype="cf_sql_timestamp" value="#start_date#">
</cfif>
ORDER BY project_name
</cfquery>
我确认 start_date 变量是一个空字符串。但是,我会收到一个指向该行的错误,并说“无法将值转换为请求的类型”,即使它不应该到达该行。
但真正奇怪的是……如果我在 WHERE 子句中添加“AND 1=1”,查询就可以完美运行。
我在一些查询中偶尔会发生这种情况,但我不能说我认识到它的模式。查询总是写得很完美。在某些情况下,查询之前正在工作,然后突然停止,可能是在文件中的其他地方发生更改时。我所要做的就是在 WHERE 子句中添加“AND 1=1”,然后它又可以工作了。其他人遇到这个或有想法如何解决它?