• ベストアンサー

フォーム入力前後のテーブルデータの同一性の確認方法は?(トランザクション?)

PHP4.3 + PEAR + PostgreSQL + Apache + Linux/Debian Sarge を使っています。 重複を許さないデータを登録するために、既に登録されているデータを確認しつつ、テーブルに新データを追加する方法についてお尋ね致します。 下記の流れを考えています。 (1)既に登録されているデータを画面に表示する。  ↓ (2)フォームを利用してユーザーが新データを入力する。  ↓ (3)フォーム入力を受信して、新データをテーブルに追加する。 この場合、(1)でのデータ表示から(3)のデータ追加登録までトランザクションをかけておかなければ、他のユーザーが同じデータを追加登録してしまう恐れがあるかと思います。 一方、(1)においてデータベースに接続した時に得たインスタンス(?)を $_SESSION['db'] = DB::connect(DSN)           (PEARを利用しています) のようにしてセッション変数に保存しても、(3)の処理に引き継ぐことができませんでした。 このような処理はどのように行えばよいのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

表示して入力して更新するまでトランザクション をかけるなんてとても稼動に耐えられないでしょう。 更新時にトランザクションで再検索をかけて 更新し、駄目な場合はエラーを返すので十分だと 思います。

RASUM2
質問者

お礼

yambejp様、ありがとうございます。 御助言を参考にさせて頂きます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 データベースに接続した時に得たインスタンス(DBハンドル、と呼称することが多いです)はセッションをまたいでは引き継げません。 画面設計を見直すことをお勧めいたします。

RASUM2
質問者

お礼

がる様、ありがとうございます。 ド素人なりに考えてみます。 私にとっては、DBハンドルはセッションをまたげないことがはっきりしました。

すると、全ての回答が全文表示されます。

関連するQ&A