我正在将应用程序从使用SQLite切换到MySQL。它可以与SQLite一起使用,并且由于我已将其更改为使用MySQL而无法使用。这是我收到的错误消息:
Message: SQLSTATE[HY000] [2000] mysqlnd cannot connect to MySQL 4.1+ using old authentication
这是什么意思?
注意:我正在运行此在本地运行的Snow Leopard,试图访问远程数据库。
它还将我的用户名和密码以纯文本格式存储在屏幕的请求参数中,这有点令人不安。
最佳答案
您正在运行PHP 5.3吗? mysqlnd
是用于PHP的新的本机MySQL驱动程序(ext/mysql
,ext/mysqli
和PDO
都使用了它,因此它不是新的API,而是三种不同API与MySQL服务器通信的新方式) -here是有关mysqlnd
的不错的文章。
现在的问题是,您的MySQL服务器使用了mysqlnd
不符合的old authentication mechanism。 mysqlnd
需要MySQL 4.1引入的新的41字节密码(因此您无法连接到SET PASSWORD
命令,例如:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypassword');
这将更改密码方案,并允许您使用
mysqlnd
连接。 Here Thomas Rabaix描述了完全相同的问题-仅供参考。