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



我可以使用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属性。

相关内容

  • 没有找到相关文章

最新更新