我可以使用cfqueryparam为空值从表中获取记录吗?
我的示例select Query是
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 = ''
调试SQL语句的解释方式是where hsc_number = null
,对于所有记录都将为false。
在一些SQL语言中(可能只是MySQL),您可以创建空安全表达式。当指定null时,该语句既可以作为an is null使用,也可以作为指定值时的equals语句使用。我个人不使用Oracle DB,但根据我的快速研究,null安全表达式的唯一选择将包括可能影响性能的函数调用。
当你需要null记录时,使用if语句切换到is null
应该是最好的方法。
<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>
在此语句中,当name值为空字符串时,将向数据库传递空值而不是表单值。这不是一个非常现实的例子,因为我个人会编写空字符串而不是null,但它展示了如何使用null属性。