Dengan pembangunan dan penggunaan teknologi PHP yang berterusan, kadangkala kami mungkin menghadapi beberapa masalah dan ralat. Antaranya, perpustakaan fungsi MySQLi yang disediakan oleh PHP adalah alat yang biasa digunakan oleh pembangun untuk mengendalikan pangkalan data MySQL. Apabila menggunakan fungsi mysqli_query(), mesej ralat biasa mungkin muncul: "Amaran PHP: mysqli_query(): (HY000/2006): Pelayan MySQL telah hilang. Apabila anda menemui ralat, anda harus mencari penyelesaian secepat mungkin supaya kod PHP anda boleh berfungsi dengan baik.
Di bawah, kami akan memberikan anda beberapa penyelesaian yang mungkin.
Apabila ralat ini berlaku, anda perlu menyemak kod PHP anda terlebih dahulu. Semak sama ada terdapat jurang yang terlalu panjang antara pernyataan sambungan MySQLi atau sama ada sambungan MySQLi tidak dikekalkan. Apabila memproses sejumlah besar data, kebarangkalian ralat ini lebih tinggi.
Jika tamat masa sambungan ditetapkan terlalu singkat, pangkalan data MySQL akan menutup sambungan dan memaparkan mesej ralat dalam pelayar semasa proses sambungan. Dalam kebanyakan kes, menetapkan tamat masa sambungan yang lebih lama akan mengurangkan kekerapan ralat ini.
Penyelesaian:
Kita boleh menggunakan fungsi ping() dalam MySQLi untuk mengekalkan status sambungan dan menyemak sama ada sambungan MySQLi adalah normal. Kaedah ini boleh menyelesaikan masalah penutupan sambungan yang tidak dijangka dengan mudah.
Pastikan anda menggunakan sintaks berikut dalam kod anda:
// Mysqli连接语句 $conn = mysqli_connect($servername, $username, $password, $dbname); // 判断数据库连接是否可用 if (mysqli_ping($conn)) { echo 'MySQL connection is still active!'; } else { echo 'MySQL connection is dead.'; }
Jika jumlah data adalah besar, anda boleh meningkatkan tamat masa untuk meningkatkan kestabilan sambungan. Anda boleh menggunakan coretan kod berikut:
// 设置超时时间 (单位为秒) ini_set('mysqlI.connect_timeout', 3600); ini_set('mysqlI.default_socket_timeout', 3600);
Mesej ralat bukan sahaja mengandungi mesej ralat sebenar, tetapi juga mungkin mengandungi mesej ralat pangkalan data. Kita boleh mendapatkan maklumat yang lebih terperinci tentang ralat dengan mengakses log pelayan pangkalan data.
Pangkalan data MySQL akan memuatkan fail konfigurasi apabila bermula, seperti /etc/my.cnf atau /etc/mysql/my.cnf. Parameter berikut perlu ditambahkan pada fail konfigurasi ini:
max_allowed_packet = 128M wait_timeout = 28800 innodb_flush_log_at_trx_commit = 2 innodb_buffer_pool_size = 1G
Antaranya, max_allowed_packet boleh menetapkan saiz penghantaran maksimum (dalam bait) yang dibenarkan oleh satu pernyataan pertanyaan SQL Nilai lalai parameter ini ialah 4MB, yang boleh dilaraskan sewajarnya mengikut keperluan sebenar. Parameter wait_timeout boleh menetapkan masa melahu sambungan MySQL dalam beberapa saat Jika masa ini terlalu lama, ia akan mengurangkan prestasi pelayan Jika ia dipendekkan, sambungan mungkin terputus. Parameter innodb_flush_log_at_trx_commit dan innodb_buffer_pool_size boleh meningkatkan prestasi dan kestabilan sambungan MySQL dan boleh dilaraskan mengikut keperluan.
Jika anda telah mencuba semua kaedah di atas dan masih tidak dapat menyelesaikan masalah, anda akhirnya boleh menyemak sama ada terdapat masalah dengan pangkalan data MySQL itu sendiri. Contohnya, anda boleh menggunakan alatan terbina dalam MySQL untuk diagnosis dan pembaikan, seperti:
mysqlcheck -o -A
Arahan ini akan melakukan semakan konsisten dan pembaikan pada pangkalan data MySQL. Perintah ini memerlukan keistimewaan pentadbir, dan anda perlu menjadi root atau pengguna dengan keistimewaan yang setara untuk melaksanakan arahan ini.
Ringkasan
Di atas ialah penyelesaian yang anda boleh cuba apabila menghadapi ralat "PHP Warning: mysqli_query(): (HY000/2006): MySQL server has gone away". MySQLi ialah alat yang sangat biasa digunakan dalam pembangunan PHP Walaupun berlakunya ralat sedemikian membawa banyak masalah kepada pembangunan kod kami, menggunakan kaedah di atas, anda masih boleh menyelesaikan masalah tersebut melalui pembaikan dan meningkatkan kestabilan dan kebolehpercayaan kod.
Atas ialah kandungan terperinci Amaran PHP: mysqli_query():Penyelesaian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!