1.本人开发PHP使用的是appserv-win32-2.6.0.exe,其中PHP版本是6.0.0-dev,MySQL版本是 6.0.4-alpha-community-log。在使用PHP连接数据库是产生了如下错误:
Warning: mysql_connect() [function.mysql-connect]: OK packet 6 bytes shorter than expected. PID=248 in D:\Code\AppServ\InstallLocation\AppServ\www\mysqltest.php on line 3
Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using old authentication in D:\Code\AppServ\InstallLocation\AppServ\www\mysqltest.php on line 3
Warning: mysql_connect() [function.mysql-connect]: in D:\Code\AppServ\InstallLocation\AppServ\www\mysqltest.php on line 3
连接失败:
我的代码如下:
<?php
header("content-type:text/html;charset=utf-8");
$conn=mysql_connect("localhost","root","root");
if(!$conn){
die("连接失败:".mysql_error());
}
echo $conn;//连接成功,打印出取到的连接
mysql_select_db("mysql");
mysql_query("set names utf8");
mysql_close($conn);
?>
问题原因:
使用高版本mysql数据库导入了低版本数据引起的,其中高版本数据库的password hashes 是41位的hashes,而低版本数据库的数据存储的root 的password是16位的hashes,需要修改user表的password字段数据为41为的hashes。
解决办法:
use mysql; // 进入存储user表的数据库
set session old_passwords=0; //修改session使用41位hashes(16为1,41的为0)
select password('root'); //查看你的password函数是否可以生成41位的hashes
set password for 'root' @'localhost' = password('root'); //使用password函数修改你的root密码为41的hashes