MySQL PHP 不兼容性:了解错误
尝试从本地连接到远程 MySQL 数据库时会出现问题中描述的问题WAMP 安装运行 PHP 5.3.0。虽然连接到运行 MySQL 5.0.45 的数据库成功,但连接到版本 5.0.22 的数据库会导致以下错误:
Warning: mysql_connect() [function.mysql-connect]: OK packet 6 bytes shorter than expected. PID=5880 in ... Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using old authentication in ...
说明
这种不兼容的根本原因在于用于连接的 MySQL 帐户的密码长度。通常,使用旧版本创建的 MySQL 帐户使用 16 个字符的密码。但是,较新版本的 PHP,例如 PHP 5.3.0,不再支持使用这些旧密码进行身份验证。
解决方案
要解决此问题,请使用以下密码受影响的 MySQL 帐户需要使用以下命令重置:
SET PASSWORD FOR 'username'@'hostmask' = PASSWORD('thepassword')
此外,建议检查服务器是否配置为默认使用或创建旧密码。
诊断查询
要进一步诊断问题,可以在有问题的 MySQL 服务器上运行以下查询以确定密码长度:
SELECT Length(`Password`), Substring(`Password`, 1, 1) FROM `mysql`.`user` WHERE `user`='username'
将“用户名”替换为用于数据库连接的实际用户名将提供有关密码长度和密码第一个字符的信息,这可以帮助确认它是否是旧式密码。
以上是从 PHP 5.3.0 连接到远程 MySQL 5.0.22 数据库时,为什么 MySQL_connect() 会失败并显示“OK packet 6 bytes less than Expected”?的详细内容。更多信息请关注PHP中文网其他相关文章!