私の知る限り、これはあなたのおばあちゃんよりも年上ですが、私の人生はわかりません。なぜphpmyadminで次のクエリを実行できますか? cfquery
タグではありません。ColdFusionでのテンポラリテーブルの作成(IDが重複していないレコードのコピー)
DROP TABLE IF EXISTS temp;
CREATE TEMPORARY TABLE temp ENGINE=MEMORY
私の知る限り、これはあなたのおばあちゃんよりも年上ですが、私の人生はわかりません。なぜphpmyadminで次のクエリを実行できますか? cfquery
タグではありません。ColdFusionでのテンポラリテーブルの作成(IDが重複していないレコードのコピー)
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を使用すると、セキュリティ上の理由から、複数のステートメントの実行がデフォルトで無効になっています。 DSNの「接続設定」にallowMultiQueries=true
を追加することで、DSNで有効にすることができます。この設定を有効にすると、データベースがSQLインジェクションの特定のフォームに公開されることに注意してください。したがって、すべてのクエリパラメータにcfqueryparam
を必ず使用してください。
allowMultiQueries
の使用を許可します ';' 1つの文(真/偽)
「偽」に、デフォルトの間に複数の のクエリを区切るためには、あなたが一時テーブルを必要とする理由がわからない、と述べました。単純な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">
多くのロジックは、通常、ストアドプロシージャでより適切にラップされます。別のクエリを使用する必要がある場合は、テンポラリテーブルがセッションベースであることに注意してください(CFセッションと同じではありません)。そのため、同じセッションまたはdb接続を維持するために、照会をcftransactionにラップする必要があります。 [私が述べたように](http://stackoverflow.com/a/39987760/104223)、それは一時テーブルのようではないようです。 – Leigh