1

MySQL と PHP で、更新を実行している人だけが特定のレコードに関する情報を表示できるようにする方法はありますか?

たとえば、あるユーザーがページをロードすると、更新が必要なレコードが表示されます。そのユーザーがこのレコードの更新を完了するまで、このページにアクセスする他のユーザーはこの特定のレコードを表示できません。

4

4 に答える 4

0

問題のデータ テーブルに列を追加することはお勧めしません。locks情報を保持するための特別なテーブルを作成したい:

create table locks (
    tablename varchar,
    primarykey int,
    userid int,
    locktime datetime);

次に、次の原則を考慮してください。

  • 各 PHP リクエストはスタンドアロンの mysql 接続です。そのため、次のようなソリューションSELECT ... FOR UPDATEは機能せず、実際に最初のリクエストを実行してロックを実行した人物のユーザー ID を保持する必要があります。
  • テーブルへのすべてのアクセスはlocks、(MySQL のステートメントを使用して) テーブル全体LOCKをロックして、同じ行をロックする際の同時実行を回避する必要があります。
  • 知る方法がない場合、特定の使用者がレコードでウィンドウを閉じて行の編集を中止したかどうか - その場合、locktimeタイムアウトを短くするか、ユーザーが作業している限りリセットされるping (つまり AJAX) メカニズムを提供する必要があります。locktimeロックされたレコード
  • locktimeユーザーは、ロックを所有していて有効期限が切れていない限り、レコードに変更を保存できます
  • tablenameもちろんサンプルでprimarykeyあり、必要に応じて調整する必要があります:-)
于 2012-07-27T09:12:39.187 に答える
0

PHPスクリプトの実行が終了するとすぐにデータベースへの接続が失われるため、誰かが編集ページを要求したときに(列を追加して)手動で行をロックする必要がありIsLockedます(プーリングなどにもかかわらず、スクリプトの実行は停止されるため、その接続は別のスクリプトに移動する可能性があるため、同じスレッドから再度ロックを解除することはできません)。

一定時間以上ロックされている行のロックを解除するために、たとえば cron によって開始される一種のロック解除スクリプトを作成することを忘れないでください。

于 2012-07-27T08:49:50.933 に答える
0

「ロックされた」列をテーブルに追加し、ユーザーが編集フォームを呼び出したら、「ロックされた」db 値を user_id に設定し、保存後に false/null に戻します。ビューアクションで、ロックされた値を確認してください

于 2012-07-27T08:48:14.853 に答える
-1

lockedステータスを設定する場所のような名前のフィールドを追加できます。lockedtimeロックがアクティブな時間のタイムスタンプを保存する場所のようなフィールドも追加するかもしれません。それはあなたのニーズに依存します。

このネイティブを行う可能性もあります。お気に入り

SELECT * FROM table WHERE primarykey = x FOR UPDATE;
于 2012-07-27T08:48:51.963 に答える