我在本地运行WAMP,但连接到远程MySQL数据库.PHP的本地版本是最新的5.3.0.
其中一个远程数据库,版本5.0.45工作正常.但是,我正在尝试连接的另一个远程数据库,即版本5.0.22在死亡之前抛出以下错误:
警告:mysql_connect()[function.mysql-connect]:OK数据包比预期的短6个字节.PID = 5880 in ...
警告:mysql_connect()[function.mysql-connect]:mysqlnd无法使用旧身份验证连接到MySQL 4.1+ ...
WTF?
更新:
恢复到PHP 5.2.*即低于5.3.0的任何内容都可以完全解决问题.只要我没有运行5.3.0,我就可以连接到两个数据库.我不确定这种奇怪的解释是什么.
Vol*_*erK 45
您正在使用的MySQL帐户可能有一个旧的16个字符长的密码(哈希).
您可以使用MySQL客户端(如HeidiSQL,MySQL控制台客户端或任何其他客户端)以及可以访问的客户端进行测试mysql.user表.如果密码字段包含16个字符,则它是旧密码,而mysqlnd不能使用它来连接MySQL服务器.
您可以为该用户设置新密码
SET PASSWORD FOR 'username'@'hostmask' = PASSWORD('thepassword')
Run Code Online (Sandbox Code Playgroud)
编辑:
您还应该检查服务器是否设置为默认使用/创建旧密码.
edit2:
请运行查询
SELECT
Length(`Password`),
Substring(`Password`, 1, 1)
FROM
`mysql`.`user`
WHERE
`user`='username'
Run Code Online (Sandbox Code Playgroud)
在5.0.22服务器上(那个"失败").替换username为您在mysql_connect()中使用的帐户.
那回报是什么?
小智 7
我一直试图找到解决这个问题的简单方法.试试这种方法.在MySQL类型中
SELECT Host, User, Password FROM mysql.user;
Run Code Online (Sandbox Code Playgroud)
如果您的密码是十六个字符,这是因为您在用户上使用过OLD_PASSWORD或者一直在运行旧版本的MySQL.要更新类型
UPDATE mysql.user SET Password=PASSWORD('newpass')
WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
分别为您的用户,主机和传递交换root,localhost和newpass.现在当你重新打字
SELECT Host, User, Password FROM mysql.user;
Run Code Online (Sandbox Code Playgroud)
您的密码应该已更改.这为我修好了.
| 归档时间: |
|
| 查看次数: |
62132 次 |
| 最近记录: |