- PR -

MySQLのAUTO_INCREMENTで、予期しない値が登録されてしまいます。

1
投稿者投稿内容
K-OCEAN
会議室デビュー日: 2008/11/15
投稿数: 1
投稿日時: 2008-11-15 20:49
はじめまして。
MySQL初心者です。

PHP5.0+MySQL5.0で、ウェブサイトの最新ニュースを自動更新するシステムを開発しています。

システムの特徴として、

 ・トピック情報(ID、タイトル、本文、トピック欄の表示画像の絶対パス、トピック記事のURL、公開/非公開ステータス)をデータベースに登録
 ・トピックの投稿日時を、「YYYY/MM/DD」の形式でデータベースに登録
 ・トピック欄に表示させる画像をアップロードした際に、所定のテキストボックスにアップロード先ディレクトリの絶対パスを表示させ、トピック投稿時にデータベースに登録

以上の機能を実現したいと考えております。

トピックのIDの登録カラムに、AUTO_INCREMENTを設定し、トピック情報がデータベースに登録された際に自動でIDを振っているのですが、トピックが2件登録された状態でフォームから投稿を行うと、

ID | タイトル  | 本文  |
---+--------+------+
 1 | タイトル1 | 本文1 |
 2 | タイトル2 | 本文2 |
 3 | タイトル3 | 本文3 |
 4 | タイトル3 | 本文3 |

と、同じトピック情報が重複して登録されてしまいます。
この登録の直後に、ブラウザの再読み込みを行うと、

ID | タイトル  | 本文  |
---+--------+------+
 1 | タイトル1 | 本文1 |
 2 | タイトル2 | 本文2 |
 3 | タイトル3 | 本文3 |
 4 | タイトル3 | 本文3 |
 5 | タイトル3 | 本文3 |

と、1件だけレコードが追加されます。

原因を調べた結果、

ID | タイトル  | 本文  |
---+--------+------+
 1 | タイトル1 | 本文1 |
 2 | タイトル2 | 本文2 |

の、2件レコードが登録された状態から、フォームからの投稿を行うと、本来 AUTO_INCREMENT の値が 3 となるはずが、4 となった状態でレコードが登録され、その結果、重複したレコードが登録されてしまうことが分かっています。

フォームからの投稿の場合でも、IDが1件ずつ振られるようにしたいと考えています。

対処法について、皆様のご意見を頂ければ幸いです。
ご教授の程、よろしくお願いいたします。
JIMMY
常連さん
会議室デビュー日: 2004/10/26
投稿数: 32
お住まい・勤務地: 東京
投稿日時: 2008-12-08 13:12
既に解決しているとは思いますが。

K-OCEANさんがおっしゃっている現象はMySQLの誤動作とは考えにくいですね。
MySQLの問題か否かは、PHPから実行しているSQLをコマンドラインで実行してみれば解ると思います。

PHPの書方の問題で、同じ処理を2回行っているのではないかと思います。
環境の原因と考える前に、自分のミスであることを疑いましょう。
1

スキルアップ/キャリアアップ(JOB@IT)