MySQL PHP Compatibility Issue
When connecting to a remote MySQL database from a local WAMP server running PHP 5.3.0, an error occurs:
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 ...
This issue typically manifests when connecting to an older MySQL database (e.g., version 5.0.22) but not to a newer one (e.g., version 5.0.45).
Cause:
The problem arises when the MySQL account being used has an old 16-character password hash.
Solution:
To resolve the issue, reset the password for the problematic account to use a modern password format. Execute the following query in a MySQL client:
SET PASSWORD FOR 'username'@'hostmask' = PASSWORD('thepassword');
Additional Information:
To verify if the password hash is indeed old, run the following query on the older MySQL server (version 5.0.22):
SELECT Length(`Password`), Substring(`Password`, 1, 1) FROM `mysql`.`user` WHERE `user`='username';
If the 'Length' field returns 16 and the 'Substring' field returns a '*' character, the password hash is old.
The above is the detailed content of Why Does My PHP 5.3.0 Connection to an Older MySQL Database Fail with \'OK packet 6 bytes shorter than expected\'?. For more information, please follow other related articles on the PHP Chinese website!