Mengapa Memasukkan Sekali dalam PHP Menyebabkan Dua Entri dalam Pangkalan Data MySQL?
Apabila melaksanakan kod PHP yang disediakan pada pelayan, anda mungkin menghadapi isu yang membingungkan apabila memasukkan satu rekod ke dalam pangkalan data MySQL menghasilkan dua entri. Masalah ini, yang nyata apabila kod itu digunakan pada pelayan langsung tetapi tidak pada localhost, telah membingungkan pembangun.
Penyebab di sebalik anomali ini terletak pada gelagat penyemak imbas. Setelah memuat semula halaman, penyemak imbas menghantar dua permintaan kepada pelayan: satu untuk skrip utama dan satu lagi untuk favicon. Dalam situasi ini, pertanyaan sisipan dilaksanakan dua kali, yang membawa kepada pemasukan dua rekod.
Untuk menyelesaikan isu ini, pertanyaan sisipan hendaklah dihadkan kepada satu permintaan sahaja. Dengan melaksanakan semakan bersyarat yang mengesahkan sama ada permintaan itu adalah untuk skrip utama, anda boleh menghalang pertanyaan daripada dilaksanakan untuk permintaan favicon.
Berikut ialah coretan kod diubah suai yang menangani isu ini:
<?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 />"; } ?>
Dengan memasukkan semakan bersyarat ini, pertanyaan sisipan hanya dilaksanakan apabila skrip utama diminta, memastikan hanya satu rekod sahaja dimasukkan ke dalam pangkalan data.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Dua Entri dalam Pangkalan Data MySQL Saya Apabila Saya Hanya Memasukkan Sekali dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!