2016-09-26 7 views
1

J'ai quelques variables qui contiennent plusieurs valeurs. Fondamentalement, je veux stocker toutes les valeurs dans ma base de données. J'utilise ce code que j'ai ici dans Stackoverflow.Requête CFloop pour stocker plusieurs valeurs dans la base de données

<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> 

Cependant, je reçois toujours une erreur de syntaxe. Je crois que ma partie cfloop est faux, quelqu'un peut-il s'il vous plaît me dire la bonne façon pour moi d'écrire ce cfloop?

Répondre

4

Le problème est avec la requête générée ne cfloop à savoir, pour la saisie de plusieurs valeurs le format devrait ressembler à ceci:

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

Aussi, utilisez cfqueryparam pour éviter l'injection sql.

Vous pouvez essayer ceci:

<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> 

Vous pourriez avoir à ajouter un chèque de recordCount avant de générer la requête pour éviter les erreurs de conserver des documents.

+0

Cela fonctionne et est la bonne réponse. Je vous remercie. – gosi123

+0

Je n'avais aucune idée que vous pouviez faire ceci - # excelQuery.currentRow NEQ excelQuery.recordCount? ',': '' # - j'ai toujours utilisé cfif. agréable! – luke