在 ColdFusion 中创建临时表(复制没有重复 ID 的记录)
Creating temp tables in ColdFusion (copying records without duplicate id)
我知道,我知道,这比你奶奶还大,但我一辈子都想不通为什么我可以在 phpmyadmin 上执行以下查询,但不能在 cfquery
标记中执行。
DROP TABLE IF EXISTS temp;
CREATE TEMPORARY TABLE temp ENGINE=MEMORY
我意识到我不能对每个 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>
对我来说有点冗长。
当使用 JDBC driver 时,出于安全原因,默认情况下禁用多条语句的执行。通过将 allowMultiQueries=true
添加到 DSN“连接设置”,可以在您的 DSN 中启用它。请注意,启用此设置会将数据库暴露给某些形式的 sql 注入。所以一定要在所有查询参数上使用 cfqueryparam
。
allowMultiQueries
Allow the use of ';' to delimit multiple
queries during one statement (true/false), defaults to 'false'
话虽如此,但不确定为什么需要临时 table。一个简单的 INSERT / SELECT 应该可以解决问题。没有理由不能从同一个 table 插入和 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">
我知道,我知道,这比你奶奶还大,但我一辈子都想不通为什么我可以在 phpmyadmin 上执行以下查询,但不能在 cfquery
标记中执行。
DROP TABLE IF EXISTS temp;
CREATE TEMPORARY TABLE temp ENGINE=MEMORY
我意识到我不能对每个 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>
对我来说有点冗长。
当使用 JDBC driver 时,出于安全原因,默认情况下禁用多条语句的执行。通过将 allowMultiQueries=true
添加到 DSN“连接设置”,可以在您的 DSN 中启用它。请注意,启用此设置会将数据库暴露给某些形式的 sql 注入。所以一定要在所有查询参数上使用 cfqueryparam
。
allowMultiQueries
Allow the use of ';' to delimit multiple queries during one statement (true/false), defaults to 'false'
话虽如此,但不确定为什么需要临时 table。一个简单的 INSERT / SELECT 应该可以解决问题。没有理由不能从同一个 table 插入和 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">