Coldfusion 为mysql表创建Insert语句

Coldfusion 为mysql表创建Insert语句,coldfusion,Coldfusion,我正在为我的表创建一个INSERT STARENT。到目前为止,一切都很顺利,我已经能够创建Insert语句。唯一剩下的问题是:它在每条记录的末尾显示一个尾随逗号。你们能看看我在这干什么吗 <cfset listcount = getQueryColumns(insertData)> <cfset counter = 1> <cfloop query="insertData"> <cfoutput>

我正在为我的表创建一个INSERT STARENT。到目前为止,一切都很顺利,我已经能够创建Insert语句。唯一剩下的问题是:它在每条记录的末尾显示一个尾随逗号。你们能看看我在这干什么吗

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

插入“mytable”(#listcount#)
价值观(
“#插入数据[col][currentRow]#”
, 
);


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

编辑:请参阅我最近的答案。我之所以保留这一条,是因为这些评论在诊断中很有用。

我认为Dan Bracuk关于反增量的说法是正确的。但是,如果使用
中的
列表
属性,则可以简化代码并完全避免使用
语句。例如:

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

默认情况下,在将列表值发送到数据库之前,这将在列表值之间放置一个逗号


查看它所具有的其他属性。

我想我已经具备了。我相信这就是你需要的:

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

插入“mytable”(#listcount#)
价值观(
“#插入数据[col][currentRow]#”
, 
);

我改变的是:

  • 正如Dan Bracuk指出的,我将
    移到了内部循环中。我还将
    移到了外部循环中,因为它需要通过连续的
    INSERT
    语句重新初始化
  • 我将
    更改为
    ,因为您不想重复记录计数(这就是为什么您的逗号不再出现在优先级之后,这是第8个字段)。相反,您希望迭代列数

他不能使用cfqueryparam,因为此时他没有查询。他只是简单地输出一个字符串。这很公平——但是使用
ValueList()
将他的源数据转换成一个列表怎么样?我想这会让他避免这两个
操作。嗨,伙计们,Dan是对的,我不需要在这里使用cfqueryparam,我只需要一个类似insert的语句。我把计数器移到了第二个环路内。我的总记录数是8。正在显示的语句如下所示,在某些字段之后,逗号不显示。我认为..示例:
INSERT-INTO-mytable(ID、by、subject、body、uploads、created、modified、priority、status、parent、DEPARTMENT\u ID、internalnote、threadID)值有问题(‘17’、‘1’、‘这是一张新票证’、‘已完成的票证详细信息,现在正在鞋上运行’、‘0’、‘2014-03-06 13:18:02.0’、‘2014-03-12 16:20:04.0’、‘正常’、‘已解决’、‘0’、‘5’、‘17’)
查看优先级后,cooma字段未显示
insertData
的来源。如果该数据来自同一数据库中的另一个表,则可以使用INSERT/SELECT语句而不是循环。仅供参考,如果确实需要循环,则应使用
cfqueryparam
。它使用绑定变量,可根据当同一条语句被多次执行时,重复使用执行计划来实现性能,就像循环一样。谢谢你,我们离我们的目标非常接近。现在代码运行得几乎很好,分别在insert语句的末尾,它给出了一个额外的逗号。下面是一个例子:insert INTO
mytable
ID
by
主题
正文
上传
创建
修改
优先级
状态
家长
部门ID,
内部注释
线程ID
持有人
锁定人
拒绝人)(‘17’、‘1’、‘这是一张新票证’、‘已完成的票证详细信息,现在已在鞋子上运行’、‘0’、‘2014-03-06 13:18:02.0’、‘2014-03-12 16:20:04.0’、‘正常’、‘已解决’、‘0’、‘5’、‘17’、‘17’、’);嗯,您是有权访问数据的人,因此您必须对其进行调试,以了解发生了什么。当然,一个起点是查看您的
getQueryColumns(insertData)
是否确实返回了您认为应该返回的列数。请记住将其中一个答案标记为正确(我希望是这一个——但不管哪一个对你帮助最大)。