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

CFloop query to store multiple values in database

我几乎没有包含多个值的变量。基本上我想将所有值存储到我的数据库中。我正在使用我在 Whosebug 中获得的这段代码。

<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 的正确方法吗?

问题出在生成的查询上,而不是 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 检查以避免没有记录的错误。