1

Doctrine DBALを使用していINSERT ... ON DUPLICATE UPDATEて、リターンが影響を受ける場所で実行したいと考えています。INSERT ... ON DUPLICATE UPDATEとaffected_rowsはMySQL固有であるため、標準のDbalexecuteUpdateを使用できないようです。そのため、標準で準備されたSQLステートメントを実行する必要があります。

依存性注入を使用して、接続($ this-> connection)をクラスファイルに挿入しています。INSERT ... ON DUPLICATE UPDATEこれらの条件下でaffected_rowsを取得するために、を実行してから2番目のqryを実行することを心配する必要があります。

DBAL接続はページ要求ごとに構築および切断されるため、競合状態は発生していないようです。この場合、私はSymfony2フレームワークを使用していますが、使用しているフレームワークまたはフレームワークなしに関係なく、答えが役立つはずです。

4

1 に答える 1

1

この状況でオブジェクト/サービスのクローンを作成することを心配する理由はありません。少なくともSymfony2(SF2)フレームワークでは、ほとんどのサービスはリクエストの期間中のみ存続します。したがって、別のリクエストでユーザーエクスペリエンスに影響を与えたり、交差したりする心配はありません。

しかし、私のINSERT .. ON DUPLICATE UPDATE問題に戻ると、2つのクエリを連続して実行することはまったく問題ありません。両方のクエリを実行するために同じ接続を使用しているため、競合状態に問題はありません。

2つのクエリは次のようになります

$sql1 = "INSERT INTO table (...) VALUES (..) ON DUPLICATE KEY UPDATE ...";

$sql2 = "SELECT ROW_COUNT()";

// Expected Results for $sql2
// 0 = no updates
// 1 = new insert
// 2 = update
于 2012-03-15T12:57:38.413 に答える