私はビジネスのためのウェブベースのフォームを友人に手伝っています。私はそれを複数のユーザーを処理する準備をしようとしています。レコードを編集用に表示する直前に、次のコードでレコードをロックするように設定しました。PHPを使ったmysql行のロック
$query = "START TRANSACTION;";
mysql_query($query);
$query = "SELECT field FROM table WHERE ID = \"$value\" FOR UPDATE;";
mysql_query($query);
(大丈夫それが大幅に簡素化されますが、それは、MySQLの本質である)
それは動作しているように表示されません。私は、同じユーザーでログイン、コマンドラインからMySQLへ直接行くと
START TRANSACTION;
SELECT field FROM table WHERE ID = "40" FOR UPDATE;
を実行したときしかし、私は効果的に、レコード「40」にアクセスしてからWebフォームをブロックし、タイムアウトの警告を得ることができます。
START TRANSACTIONの代わりにBEGINを使用しようとしました。私はSET AUTOCOMMIT = 0を最初にやろうとし、ロック後にトランザクションを開始しようとしましたが、PHPコードから行をロックできないようです。コマンドラインから行をロックすることができるので、データベースの設定方法に問題はないと思います。私は私の読書に欠けているシンプルなものがあることを本当に望んでいます。
私はApache 2.2.14、MySQL 5.1.41、PHP 5.3.1を持つXAMPPバージョン1.7.3を開発中です。
ありがとうございます。これは私の初めての投稿ですが、私は過去にこのサイトからたくさんの知識を集めました。
2番目のmysql_query($ query)の後に何をしましたか? ?あなたのPHPスクリプトが終了したら、ロックを解放してください – PasteBT