在数据库中插入数据时处理空值

Jac*_*ack 4 coldfusion cfquery coldfusion-8

我有以下内容cfquery:

<cfquery name="CQuery" datasource="XX.X.X.XXX">
        INSERT INTO DatabaseName 
            (PhoneNumber_vch,
             Company_vch,
             date_dt)

         VALUES(#PhoneNumber#,
            #Company#,
            #Date# )

    </cfquery>
Run Code Online (Sandbox Code Playgroud)

公司名称不存在的情况下有空值,我相信因为我得到以下错误:

 Error Executing Database Query.
[Macromedia][SQLServer JDBC Driver][SQLServer]Incorrect syntax near ','. 
Run Code Online (Sandbox Code Playgroud)

,错误消息中指向的逗号是在#Company#字段之后 .请让我知道是因为空值和最佳解决方法吗?

PhoneNumber,company和Date中的值是从XML SOAP响应中提取的,并正确使用了trim函数,如我在上一篇文章中所讨论的那样.

在coldfusion中使用cfif

谢谢

小智 14

如果您在任何接受动态参数的数据库SQL上使用CFQueryParam,您可以一举两得.首先也是最重要的,防止SQL注入攻击,然后你可以使用null =""的属性在记录中插入一个NULL值.

 <cfquery name="CQuery" datasource="XX.X.X.XXX">
      INSERT INTO DatabaseName (PhoneNumber_vch, Company_vch, date_dt)
      VALUES(
           <cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(PhoneNumber)#" null="#NOT len(trim(PhoneNumber))#" />
           ,<cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(Company)#" null="#NOT len(trim(Company))#" />
           ,<cfqueryparam cfsqltype="cf_sql_timestamp" value="#Date#" null="#NOT len(trim(Date))#" />
     )
</cfquery>
Run Code Online (Sandbox Code Playgroud)

  • @Jack - 请记住,`null`与空字符串""不同.使用`cfqueryparam`你可以简单地插入空字符串而不是`null`.(至少对于`varchar`列).这一切都取决于您的目标,以及列是否允许空值. (2认同)