今天,一个同事,用客户端可以连接mysql,但是用php函数就连不上了,报如下警告:
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/
具体原因我还不是很清楚,跟old密码长度有关?先记录下来,日后研究。解决方法如下:
SET old_passwords = 0; UPDATE mysql.user SET PASSWORD = PASSWORD( 'blog.snsgou.com' ) WHERE User = 'php-note' LIMIT 1 ; SELECT LENGTH( PASSWORD ) FROM mysql.user WHERE User = 'php-note'; FLUSH PRIVILEGES ;
附 PHP连接MySQL测试代码:
<?php $con = mysql_connect("192.168.3.240:3306","php-note","blog.snsgou.com"); if (!$con) { die('Could not connect: ' . mysql_error()); } ?>
【后记】
在实际的项目中,服务器的数据库是不允许你改的,所以只能改自己本地的php版本,把php版本降低点,问题也可解决(php5.2.6即可),强烈推荐WampServer集成环境,支持各个PHP版本的切换。WampServer—PHP多版本共存解决方案