- - PR -
insertが2回実行される(Perl&MySQL)
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-03-27 15:39
perlにてテーブル(MySQL)へ1レコード追加される
inert文を発行した所、2レコード追加される現象が発生しており 解決策がわからず悩んでおります。 ご情報等御座いましたらご教授をお願い致します。 <環境> 開発環境:RedhatLinux9(Apache2.0.4) perl5.8 mySQL3.23 <現象> 下記果物テーブルにキー項目'3'、品名'みかん'のレコードを追加する CGIを実行するとエラーが発生。 before [果物テーブル] キー 品名 1 リンゴ 2 スイカ '3'、'みかん'レコードを追加するCGIを実行 after [果物テーブル] キー 品名 1 リンゴ 2 スイカ 3 みかん エラーが発生。しかし、みかんレコードは追加されていた <perlのinsertロジック> use DBI; $db = DBI->connect(DB, ユーザ, パスワード, {RaiseError => 1}); $sql = "insert into 果物テーブル(キー,品名) values('3','みかん')"; $sth = $db->prepare($sql); $sth->execute; $sth->finish; <行った調査内容> ・キー項目値を自動採番に変更 キー項目値を自動採番するロジックを追加しCGIを実行。 before [果物テーブル] キー 品名 1 リンゴ 2 スイカ 最終レコードのキー項目'2'に1加算し'3','みかん'レコードを追加するCGIを実行 after [果物テーブル] キー 品名 1 リンゴ 2 スイカ 3 みかん 4 みかん 身に覚えのない'4','みかん'レコードが作られていた。 2回insertが実行されている!? ・insertロジック実行回数調査 insertロジックが2回走っていると思い、insertロジックを通った回数を 変数にセットし画面表示を行った。 ↓ insertロジックは1回だけしか動いてない。 でも2レコード追加されている。 ・MySQLでinsertを実行 MySQLのコマンドライン上で1レコード追加するinsertを発行。 ↓ 正しく1レコードだけインサートされる。 以上 不足な情報が御座いましたら、ご指摘をお願い致します。 宜しくお願いします。 |
|
投稿日時: 2004-03-27 20:12
Apache経由でCGIとして実行されたのであれば、以下のようなこと
が考えられるのではないでしょうか? insertロジックを通った回数の測定方法として、CGI内でのみ有効 な変数で計測したのであれば、insertロジックが1回しか呼び出 されなかったとしても、そのCGIが2回呼び出されているという可 能性が考えられます。 利用するクライアント(ブラウザ)やタイミングなど条件によって は、クライアント側から同じリクエストが再送されてしまうこと が考えられると思いますので、Apacheのログなどで2回そのCGIが 呼び出されていないかご確認されてはいかがでしょうか? |
|
投稿日時: 2004-03-29 14:03
藍空様こんにちわ。
返信が遅くなり申し訳御座いませんでした。 apacheのログを解析した所、ご指摘の通り CGIが2回実行されておりました。 CGIのソースを解析した所 2回実行される原因が判明しました。 登録ボタン(INPUT type="image")を押すことにより Insert処理が実行されるよう組んでいましたが INPUTのtypeを"button"に変更する事で解決しました。 可能であれば”button”でなく”image”を使用したいのですが ”image”を使用しても2回実行されない方法が御座いましたら。 ご情報を頂けますでしょうか 宜しくお願いします。 |
|
投稿日時: 2004-03-29 15:24
>可能であれば”button”でなく”image”を使用したいのですが
>”image”を使用しても2回実行されない方法が御座いましたら。 >ご情報を頂けますでしょうか >宜しくお願いします。 お世話になっております。 先ほどの上記、質問事項ですが IEの不具合である事がわかりました。 ↓情報元です。 http://support.microsoft.com/default.aspx?scid=kb;ja;822276 ”image”を使用しない方向で考えてみます。 有難う御座いました。 |
1