php連接MySQL時產生錯誤:mysqlnd cannot connect to MySQL 4.1+ using old authentication


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








注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com