在ColdFusion中创建临时表(复制没有重复ID的记录)

时间:2016-09-29 20:26:54

标签: coldfusion-8

我知道,我知道,这比你奶奶的年龄大,但是我无法理解为什么我可以在phpmyadmin上执行以下查询而不是cfquery标记。

  DROP TABLE IF EXISTS temp;
  CREATE TEMPORARY TABLE temp ENGINE=MEMORY

2 个答案:

答案 0 :(得分:0)

我意识到每个cfquery标签不能生成多个查询。基本上这是用于使用ColdFusion复制MySQL中的记录。如果有人能够进一步简化这一点,我会很感激。

  <cfquery datasource="#request.datasource#">
      DROP TABLE IF EXISTS temp
  </cfquery>
  <cfquery result="copied" datasource="#request.datasource#">
      CREATE TABLE temp ENGINE=MEMORY
      SELECT * FROM mytable WHERE id= <cfqueryparam value="#id_im_looking_for#">
  </cfquery>

  <cfquery result="copied" datasource="#request.datasource#">
    INSERT INTO mytable SELECT NULL, name, description, NOW() FROM temp
  </cfquery>

  <cfquery datasource="#request.datasource#">
    DROP TABLE temp
  </cfquery>

对我来说有点啰嗦。

答案 1 :(得分:0)

使用JDBC driver时,出于安全原因,默认情况下禁用多个语句的执行。通过将allowMultiQueries=true添加到DSN&#34;连接设置&#34;,可以在DSN中启用它。请注意,启用此设置会使数据库暴露于某些形式的sql注入。因此,请务必在所有查询参数上使用cfqueryparam

  

allowMultiQueries

     

允许使用&#39;;&#39;划分多个   一个陈述期间的查询(真/假),默认为&#39; false&#39;

话虽如此,不确定为什么需要临时表。一个简单的INSERT / SELECT就可以了。没有理由不能从同一个表中插入和选择。除非最终结果违反约束,否则不会。

 INSERT INTO mytable ( Name, Description, SomeDateCol )
 SELECT name, description, NOW() 
 FROM   mytable 
 WHERE  id = <cfqueryparam value="#id_im_looking_for#" cfsqltype="cf_sql_YourTypeHere">