我知道,我知道,这比你奶奶的年龄大,但是我无法理解为什么我可以在phpmyadmin上执行以下查询而不是cfquery
标记。
DROP TABLE IF EXISTS temp;
CREATE TEMPORARY TABLE temp ENGINE=MEMORY
答案 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">