我可以使用cfqueryparam作为空值来从表中获取记录吗?
我的样本选择查询
Select * from users where lastname is null
Dan Bracuk的编辑从这里开始
以下是针对oracle数据库的示例查询:
<cfquery name="x" datasource="pamot">
select *
from clinic_fu
where hsc_number = <cfqueryparam cfsqltype="cf_sql_varchar" value="fred" null="yes">
</cfquery>
以下是网页的调试。
select *
from clinic_fu
where hsc_number = ?
Query Parameter Value(s) -
Parameter #1(cf_sql_varchar) =
你怎么解释这个?是这样的:
where hsc_number is null
或者
where hsc_number = ''
答案 0 :(得分:2)
调试SQL语句的解释方式是where hsc_number = null
,对于所有记录都将为false。
在某些SQL语言(可能只是MySQL)中,您可以创建null安全表达式。该语句既可以在指定null时为null,也可以在指定值时为equals语句。我个人不使用Oracle DB,但是从我的快速研究中,null安全表达的唯一选择将包括可能影响性能的函数调用。
当您需要空记录时切换到is null
的if语句应该是最好的方法。
<cfquery name="x" datasource="pamot">
select *
from clinic_fu
where hsc_number
<cfif conditionForNull>
is null
<cfelse>
= <cfqueryparam cfsqltype="cf_sql_varchar" value="#hsc_number#" />
</cfif>
</cfquery>
我发现null属性对insert和update语句有用,而不是select语句。
<cfquery result=>
INSERT INTO users
(first_name, last_name)
VALUES
(<cfqueryparam cfsqltype="cf_sql_varchar" value="#form.firstName#" null="#form.firstName eq ""#" />,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#form.lastName#" null="#form.lastName eq ""#" />);
</cfquery>
在此语句中,当名称值为空字符串时,空值将传递给数据库而不是表单值。这不是一个非常现实的例子,因为我个人会写空字符串而不是null,但它显示了如何使用null属性。