2016-09-26 72 views
1

我有幾個包含多個值的變量。基本上我想將所有的值存儲到我的數據庫中。我正在使用這個代碼,我在這裏在Stackoverflow。CFloop查詢在數據庫中存儲多個值

<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的正確方法嗎?

回答

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> 

您可能產生的查詢,以避免任何記錄錯誤,然後添加一個總記錄檢查。

+0

這是有效的,是正確的答案。謝謝。 – gosi123

+0

我不知道你可以這樣做 - #excelQuery.currentRow NEQ excelQuery.recordCount? ',':''# - 我一直使用cfif。太好了! – luke