MySQL PHP 不兼容

2022-08-30 18:04:47

我在本地运行WAMP,但连接到远程MySQL数据库。PHP 的本地版本是最新的 5.3.0。

其中一个远程数据库,版本 5.0.45 工作正常。但是,我尝试连接到的另一个远程数据库(版本 5.0.22)在死机前会引发以下错误:

警告:mysql_connect() [function.mysql-connect]:好的数据包比预期的短 6 个字节。PID=5880 in ...

警告:mysql_connect() [function.mysql-connect]:mysqlnd无法使用旧的身份验证连接到MySQL 4.1 +...

跆拳道?

更新:

恢复到 PHP 5.2.* 即任何低于 5.3.0 的内容都可以完全解决问题。只要我不运行5.3.0,我就可以连接到两个数据库。我不确定这种怪异的解释是什么。


答案 1

您使用的MySQL帐户可能具有旧的16个字符长的密码(哈希)。
您可以使用MySQL客户端(如HeidiSQL,MySQL控制台客户端或任何其他客户端)和有权访问.桌子。如果密码字段包含16个字符,则为旧密码,mysqlnd无法使用它连接到MySQL服务器。
您可以使用以下命令为该用户设置新密码mysqluser

SET PASSWORD FOR 'username'@'hostmask' = PASSWORD('thepassword')

dev_mysql_set_password

编辑:
您还应该检查服务器是否默认设置为默认使用/创建旧密码

编辑2:
请运行查询

SELECT
  Length(`Password`),
  Substring(`Password`, 1, 1)
FROM
  `mysql`.`user`
WHERE
  `user`='username'

在 5.0.22 服务器上(“失败”的服务器)。替换为您在 mysql_connect() 中使用的帐户。
这又会有什么回报?username


答案 2

我一直在尝试找到解决此问题的简单方法。请尝试此方法。在 MySQL 类型中

SELECT Host, User, Password FROM mysql.user;

如果您的密码是十六个字符,这是因为您在用户上使用了OLD_PASSWORD或一直在运行旧版本的MySQL。更新键入

UPDATE mysql.user SET Password=PASSWORD('newpass')
  WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;

分别为您的用户,主机和通行证交换root,本地主机和newpass。现在,当您重新键入时

SELECT Host, User, Password FROM mysql.user;

您的密码应该已更改。这为我修复了它。


推荐