1

我可以将 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 = ''
4

1 回答 1

2

解释调试 SQL 语句的方式where hsc_number = null对于所有记录都是错误的。

在某些 SQL 语言(可能只是 MySQL)中,您可以创建空安全表达式。该语句将在指定 null 时作为 is null 或在指定值时作为 equals 语句工作。我个人不使用 Oracle DB,但根据我的快速研究,空安全表达式的唯一选项将包括可能影响性能的函数调用。

在需要空记录时切换到的 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 属性对插入和更新语句比对 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 属性。

于 2014-07-16T20:09:46.460 回答