PHP で 1 回挿入すると、MySQL データベースに 2 つのエントリが発生するのはなぜですか?
提供された PHP コードをサーバー上で実行すると、次のような問題が発生する可能性があります。 MySQL データベースに 1 つのレコードを挿入すると 2 つのエントリが作成されるという、ややこしい問題があります。この問題は、コードがローカルホストではなくライブサーバーにデプロイされている場合に発生し、開発者を困惑させてきました。
この異常の原因はブラウザの動作にあります。ページを更新すると、ブラウザは 2 つのリクエストをサーバーに送信します。1 つはメイン スクリプト用、もう 1 つはファビコン用です。この状況では、挿入クエリが 2 回実行され、2 つのレコードが挿入されます。
この問題を解決するには、挿入クエリをリクエストの 1 つだけに制限する必要があります。リクエストがメイン スクリプトに対するものであるかどうかを検証する条件付きチェックを実装することで、ファビコン リクエストに対してクエリが実行されるのを防ぐことができます。
この問題に対処する変更されたコード スニペットは次のとおりです。
<?php $db = mysql_connect('localhost', 'zzzzzzz', 'xxxxxx') or die('Unable to connect.' . mysql_error()); mysql_select_db('test', $db) or die(mysql_error($db)); // Check if the request is for the main script if ($_SERVER['REQUEST_URI'] == '/script.php') { $sql = "INSERT INTO test_table(value, insert_time) VALUES ('testing', '" . time() . "')"; $result = mysql_query($sql); } $select = "select * from test_table"; $rs = mysql_query($select); while ($row = mysql_fetch_array($rs)) { echo $row["test_id"] . " -- " . $row["value"] . " -- " . $row["insert_time"] . "<br />"; } ?>
この条件チェックを組み込むことにより、メイン スクリプトが要求された場合にのみ挿入クエリが実行され、単一レコードのみがデータベースに挿入されることが保証されます。
以上がPHP に 1 回挿入しただけなのに、MySQL データベースに 2 つのエントリが取得されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。