いつもお世話になります。
仕様言語はPHPで単純にMySQLのテーブルへINSERTを一度行うのみ、という非常にシンプルな内容です。
そこで今までこういったことはなかったのですが、ページをブラウザでロードした際に一度開いただけで複数回INSERTが実行されてしまうという現象が起こり困っております。
当初シンプルなソース内容ではなかった為、別の要因かと思ったのですが、
最終的にただINSERT一文だけ、実行はmysqli_query関数のみ、という状態でも起こるということがわかりました。
ブラウザも始めにgoogle chromeで試していた為、ブラウザ依存の現象かと思ったのですが、firefoxでも同現象が確認できました。
また、100%起こる現象ではなく、新規でタブを開きアドレスを貼り実行、とすると起きたり起きなかったりします。
一度開いた後の更新ボタンやF5キーでのリロードでは起こりにくいような印象がありますが、そちらも0%ではございません。
一度にINSERTされる数は1つ、または3つのことが多いです。
(稀に5,6個入ることもあります…)
タイミングを調べる為にタイムスタンプとSESSION変数で調べてみたのですが、結果も不思議なもので、
PHP
1session_start(); 2$_SESSION['test']++; 3$db = mysqli_connect("localhost", "○○○", "○○○", "○○○"); 4$sql = "INSERT INTO ~"; 5$rs = mysqli_query($db, $sql);
上記のように+1していき、その値をINSERTしてみたところ、例えば以下のようになりました。
(この際、一気に5つデータが入りました)
- SESSIONの値, タイムスタンプ
- 1, 2016/7/1 10:51:20
- 2, 2016/7/1 10:51:20
- 1, 2016/7/1 10:51:24
- 1, 2016/7/1 10:51:25
- 2, 2016/7/1 10:51:25
5つデータが入ってはいるが、SESSIONの+1は5回行われているわけではなく、
1と2のみでその際のタイムスタンプも時系列的には前後している感じ…?でしょうか…。
また、この際SESSION変数は初期化してない為、初回実行は当然エラーが出ますが、画面上の表示は初回実行時に出るエラー表示が出ますので、
実際にリロードのようなものが5回走った、ということでもなさそうです。
ソースは上記の5行で全てです。
環境としまして、ローカルのXAMPPでもレンタルサーバー上でも同じ現象が起こります。
mysqliでもpdoでも無関係に起こります。
タイミングもバラバラでSESSION変数を変えることでストップかけることもできない状態でかなり困っています…。
同現象を経験された方、解消された方おられましたらお力をお貸しください…。
よろしくお願い致します。
[追記]
フレームワークなどは使用しておりません。
[追記:アパッチログ]
127.0.0.1 - - [01/Jul/2016:12:19:20 +0900] "GET /test/ HTTP/1.1" 200 273 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" 127.0.0.1 - - [01/Jul/2016:12:19:21 +0900] "HEAD /test/ HTTP/1.1" 200 - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20150101 Firefox/44.0 (Chrome)" 127.0.0.1 - - [01/Jul/2016:12:19:21 +0900] "GET /test/ HTTP/1.1" 200 273 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20150101 Firefox/44.0 (Chrome)"
回答2件
あなたの回答
tips
プレビュー