47

ON DUPLICATE KEY UPDATEZend Framework 1.5 で使用したいのですが、可能ですか?

INSERT INTO sometable (...)
VALUES (...)
ON DUPLICATE KEY UPDATE ...
4

7 に答える 7

55

私は 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");
于 2008-11-19T17:46:42.163 に答える
6

サイドバーとして、句を簡素化し、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を参照してください。

于 2009-07-30T14:44:32.670 に答える
5

@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';
于 2009-07-28T07:10:34.867 に答える
1

代わりにこれを使用してください:

REPLACE INTO sometable SET field ='value'.....

これは、存在する場合は更新され、存在しない場合は挿入されます。これは、標準の mysql API の一部です。

于 2011-09-07T19:27:58.107 に答える
-7

次のようなことが簡単にできます。

IDに一意のインデックスを設定します

その後

try {
   do insert here
} catch (Exception $e) {
   do update here
}
于 2010-03-12T19:14:16.420 に答える