如何使用cfqueryparam获取空值来从表中获取记录?

时间:2014-07-16 16:05:03

标签: sql coldfusion cfquery cfqueryparam

我可以使用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 = ''

1 个答案:

答案 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属性。