ON DUPLICATE KEY UPDATE
Zend Framework 1.5 で使用したいのですが、可能ですか?
例
INSERT INTO sometable (...)
VALUES (...)
ON DUPLICATE KEY UPDATE ...
ON DUPLICATE KEY UPDATE
Zend Framework 1.5 で使用したいのですが、可能ですか?
例
INSERT INTO sometable (...)
VALUES (...)
ON DUPLICATE KEY UPDATE ...
私は Zend で働いており、特に Zend_Db にかなり取り組んでいました。
いいえ、ON DUPLICATE KEY UPDATE
構文の API サポートはありません。この場合、query()
完全な SQL ステートメントを自分で使用して作成する必要があります。
harvejs が示すように、値を SQL に補間することはお勧めしません。クエリ パラメータを使用します。
編集:式を使用して、パラメーターの繰り返しを避けることができますVALUES()
。
$sql = "INSERT INTO sometable (id, col2, col3) VALUES (:id, :col2, :col3)
ON DUPLICATE KEY UPDATE col2 = VALUES(col2), col3 = VALUES(col3)";
$values = array("id"=>1, "col2"=>327, "col3"=>"active");
サイドバーとして、句を簡素化し、ON DUPLICATE KEY UPDATE
スクリプトが実行する必要がある処理の量を減らすことができますVALUES()
:
$sql = 'INSERT INTO ... ON DUPLICATE KEY UPDATE id = VALUES(id), col2 = VALUES(col2), col3 = VALUES(col3)';
詳細については、 http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.htmlを参照してください。
@Bill Karwin: 素晴らしいソリューションです! しかし、疑問符の代わりに名前付きのプレースホルダー (":id"、":col1"、…) を使用した方がよいでしょう。array_marge で値を複製する必要はありません。また、"VALUES" の代わりに "INSERT" の "SET" 構文を使用する場合、コードはより単純になり、任意のフィールド セットに対して自動的に生成されます。
$sql = 'INSERT INTO sometable SET id = :id, col2 = :col2, col3 = :col3
ON DUPLICATE KEY UPDATE id = :id, col2 = :col2, col3 = :col3';
代わりにこれを使用してください:
REPLACE INTO sometable SET field ='value'.....
これは、存在する場合は更新され、存在しない場合は挿入されます。これは、標準の mysql API の一部です。
次のようなことが簡単にできます。
IDに一意のインデックスを設定します
その後
try {
do insert here
} catch (Exception $e) {
do update here
}