我正在将应用程序从使用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/mysqlext/mysqliPDO都使用了它,因此它不是新的API,而是三种不同API与MySQL服务器通信的新方式) -here是有关mysqlnd的不错的文章。

现在的问题是,您的MySQL服务器使用了mysqlnd不符合的old authentication mechanismmysqlnd需要MySQL 4.1引入的新的41字节密码(因此您无法连接到SET PASSWORD命令,例如:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypassword');


这将更改密码方案,并允许您使用mysqlnd连接。 Here Thomas Rabaix描述了完全相同的问题-仅供参考。

10-04 17:12