Ketidakserasian PHP MySQL: Memahami Ralat
Isu yang diterangkan dalam soalan timbul apabila cuba menyambung ke pangkalan data MySQL jauh dari tempatan Pemasangan WAMP menjalankan PHP 5.3.0. Semasa menyambung ke pangkalan data yang menjalankan MySQL 5.0.45 berjaya, menyambung ke pangkalan data dengan versi 5.0.22 menghasilkan ralat berikut:
Warning: mysql_connect() [function.mysql-connect]: OK packet 6 bytes shorter than expected. PID=5880 in ... Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using old authentication in ...
Penjelasan
Punca ketidakserasian ini berpunca daripada panjang kata laluan akaun MySQL yang digunakan untuk menyambung. Biasanya, akaun MySQL yang dibuat dengan versi lama menggunakan kata laluan 16 aksara. Walau bagaimanapun, versi PHP yang lebih baharu, seperti PHP 5.3.0, tidak lagi menyokong pengesahan dengan kata laluan lama ini.
Penyelesaian
Untuk menyelesaikan isu ini, kata laluan untuk akaun MySQL yang terjejas perlu ditetapkan semula menggunakan arahan seperti:
SET PASSWORD FOR 'username'@'hostmask' = PASSWORD('thepassword')
Selain itu, adalah dinasihatkan untuk menyemak sama ada pelayan dikonfigurasikan untuk menggunakan atau mencipta kata laluan lama secara lalai.
Pertanyaan Diagnostik
Untuk mendiagnosis lebih lanjut isu, pertanyaan berikut boleh dijalankan pada pelayan MySQL yang bermasalah untuk menentukan panjang kata laluan:
SELECT Length(`Password`), Substring(`Password`, 1, 1) FROM `mysql`.`user` WHERE `user`='username'
Menggantikan 'nama pengguna' dengan nama pengguna sebenar yang digunakan untuk sambungan pangkalan data akan memberikan maklumat tentang panjang kata laluan dan aksara pertama kata laluan, yang boleh membantu mengesahkan sama ada ia adalah kata laluan gaya lama.
Atas ialah kandungan terperinci Mengapa MySQL_connect() gagal dengan \'Paket OK 6 bait lebih pendek daripada jangkaan\' apabila menyambung ke pangkalan data MySQL 5.0.22 jauh daripada PHP 5.3.0?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!