为mysql表创建一个Insert语句

时间:2014-03-25 18:27:40

标签: coldfusion

我正在为我的桌子创建一个INSERT Starement。直到现在一切顺利,我已经能够创建插入声明。只有问题左边是:它在每条记录结束后显示一个尾随逗号。你们可以看看我在这里做的那些混乱

<cfset listcount = getQueryColumns(insertData)>
    <cfset counter = 1>
      <cfloop query="insertData">
      <cfoutput>
        INSERT INTO `mytable` (#listcount#) 
        VALUES(
            <cfloop index="col" list="#listcount#">'#insertData[col][currentRow]#' 
                <cfif counter LT insertData.recordcount>,</cfif> 
            </cfloop>);<br><br>
      </cfoutput>  
      <cfset counter++>
      </cfloop>

3 个答案:

答案 0 :(得分:1)

您的错误是由于您在外循环而不是内循环中递增计数器。

答案 1 :(得分:0)

编辑:请参阅我最近的回答。我将这一个留在原处,因为这些评论对诊断很有用。

我认为Dan Bracuk对你的计数器增量是正确的。但是,如果您使用<cfif >中的list属性,则可以简化代码并完全避免使用<cfqueryparam >语句。例如:

<cfqueryparam value="#NAME_OF_LIST#" list="yes" >

默认情况下,这会在您将列表值发送到数据库之前使用逗号。

查看http://www.cfquickdocs.com/cf8/#cfqueryparam所需的其他属性。

答案 2 :(得分:0)

我想我已经明白了。我相信这就是你所需要的:

<cfset listcount = getQueryColumns(insertData)>
  <cfloop query="insertData">
  <cfset counter = 1>
  <cfoutput>
    INSERT INTO `mytable` (#listcount#) 
    VALUES(
        <cfloop index="col" list="#listcount#">'#insertData[col][currentRow]#' 
            <cfif counter LT listcount>,</cfif> 
            <cfset counter++>
        </cfloop>);<br><br>
  </cfoutput>  
  </cfloop>

我改变的是:

  • 正如Dan Bracuk指出的那样,我将<cfset counter++>移到了内环中。我还在外部循环中移动<cfset counter = 1>,因为它需要通过连续的INSERT语句重新初始化。
  • 我将<cfif counter LT insertData.recordcount>更改为<cfif counter LT listcount>,因为您不想迭代记录计数(这就是为什么您的逗号停止显示在优先级之后,这是第8个字段)。相反,您希望迭代列数。