2016-09-26 3 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> 

Вы, возможно, придется добавить проверку RecordCount перед генерацией запроса, чтобы избежать ошибок, для каких-либо записей.

+0

Это работает и является правильным ответом. Спасибо. – gosi123

+0

Я понятия не имел, что вы можете это сделать - # excelQuery.currentRow NEQ excelQuery.recordCount? ',': '' # - я всегда использовал cfif. хороший! – luke

Смежные вопросы