CFloop查询在数据库中存储多个值

时间:2016-09-26 05:11:47

标签: coldfusion coldfusion-11 cfloop

我的变量包含多个值。基本上我想将所有值存储到我的数据库中。我使用的是Stackoverflow中的代码。

<cfquery datasource="databaseName">

INSERT INTO spreadsheet 
    ([Local.Time.Stamp],
    [Energy.Delivered..kVAh.],
    [Energy.Received..kVAh.],
    [Energy.Received..kVARh.],
    [Energy.Delivered..kVARh.],
    [Real.A..kW.],
    [Real.B..kW.])

    VALUES
    (<cfloop query="excelquery">
    '#excelquery.col_1#',
    '#excelquery.col_2#',
    '#excelquery.col_3#',
    '#excelquery.col_4#',
    '#excelquery.col_5#',
    '#excelquery.col_6#',
    '#excelquery.col_7#'
    </cfloop>)

</cfquery>

但是我总是遇到语法错误。我相信我的cfloop部分是错误的,有人可以告诉我正确的方法来编写cfloop吗?

1 个答案:

答案 0 :(得分:4)

问题在于生成的查询不是cfloop,即,为了输入多个值,格式应该是这样的:

INSERT INTO TableName (col,col,...) VALUES (val,val,...),(val,val,...),...

另外,使用cfqueryparam来避免sql注入。

你可以试试这个:

<cfquery datasource="databaseName">

  INSERT INTO spreadsheet 
    ([Local.Time.Stamp],
    [Energy.Delivered..kVAh.],
    [Energy.Received..kVAh.],
    [Energy.Received..kVARh.],
    [Energy.Delivered..kVARh.],
    [Real.A..kW.],
    [Real.B..kW.])

  VALUES
   <cfloop query="excelquery">

     <!--- cf_sql_varchar is just an example.  --->
     (<cfqueryparam cfsqltype="cf_sql_varchar" value="#excelquery.col_1#">,
      <cfqueryparam cfsqltype="cf_sql_varchar" value="#excelquery.col_2#">,
      <cfqueryparam cfsqltype="cf_sql_varchar" value="#excelquery.col_3#">,
      <cfqueryparam cfsqltype="cf_sql_varchar" value="#excelquery.col_4#">,
      <cfqueryparam cfsqltype="cf_sql_varchar" value="#excelquery.col_5#">,
      <cfqueryparam cfsqltype="cf_sql_varchar" value="#excelquery.col_6#">,
      <cfqueryparam cfsqltype="cf_sql_varchar" value="#excelquery.col_7#">) 
      #excelQuery.currentRow NEQ excelQuery.recordCount ? ',': ''#
    </cfloop>

</cfquery>

您可能必须在生成查询之前添加recordCount检查,以避免没有记录的错误。