Warning: mysql_connect() [function.mysql-connect]: Premature end of data (mysqlnd_wireprotocol.c:554) in path/to/the/file/where/connection/script/is/written/
Warning: mysql_connect() [function.mysql-connect]: OK packet 1 bytes shorter than expected in path/to/the/file/where/connection/script/is/written/
Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password'). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file in path/to/the/file/where/connection/script/is/written/
As you will see, the core issue here is that MySQL can have passwords with hashes stored in the old 16-character format, which is not supported by PHP 5.3′s new mysqlnd library.
old_passwords = 1
mysql> SELECT Length(PASSWORD('xyz')); +-------------------------+ | Length(PASSWORD('xyz')) | +-------------------------+ | 16 | +-------------------------+ 1 row in set (0.00 sec)
mysql> SELECT user, Length(`Password`) FROM `mysql`.`user`;
This will show you which passwords are in the old format, ex:
+----------+--------------------+ | user | Length(`Password`) | +----------+--------------------+ | root | 41 | | root | 16 | | user2 | 16 | | user2 | 16 | +----------+--------------------+
UPDATE mysql.user SET Password = PASSWORD('password') WHERE user = 'username';
FLUSH PRIVILEGES;