4

当我运行$conn = mysql_connect($host, $user, $pass);时,我能够连接到数据库,但是当我这样做时,var_dump($conn)我回来了bool(true),这限制了我与多个服务器的多个连接。

这台计算机上的原始设置是带有 PHP 5.2 版本的 XAMPP,该版本通过 PHP 安装程序升级到 PHP 5.3.4。它可以毫无问题地连接到其本地数据库(除了返回布尔值而不是资源链接标识符),但无法连接到任何远程机器(并且已确认连接到远程机器的能力)。在无法提出解决方案的情况下,我升级到内置 PHP 5.3.1 的 XAMPP 版本。重新安装 XAMPP 后出现完全相同的错误,这让我相信这是一个更大的问题.

编辑 1 **

移动到全新安装的 Windows 并安装 XAMPP 并尝试运行 mysql_connect 到远程服务器(PHP 5.3.1)我得到了同样的错误:

Warning: mysql_connect() [function.mysql-connect]: Premature end of data (mysqlnd_wireprotocol.c:554) in [Removed] on line 2

Warning: mysql_connect() [function.mysql-connect]: OK packet 1 bytes shorter than expected in [Removed]p on line 2

Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password'). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file in [Removed] on line 2
4

4 回答 4

4

检查文件old_passwords中的选项my.cnf

http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_old-passwords

如果由于某种原因您不能切换到新密码,则不能mysqlnd用作 MySQL 驱动程序,需要切换回旧密码。

有关的更多信息mysqlnd

http://dev.mysql.com/downloads/connector/php-mysqlnd/

于 2011-01-26T16:35:08.290 回答
4

关于您在编辑中发布的错误,在 Linux 上连接到 MySQL 5.0.45 时,我在使用 PHP 5.3.5 的 Windows 7 上遇到了同样的错误。我的解决方案是在 my.cnf 中禁用“old_passwords”并运行

set password = password('my password');

该错误消息并未明确表明您必须执行这两个步骤才能解决问题。希望这可以帮助。

于 2011-03-11T19:21:23.523 回答
2

当您想更改密码并且服务器不断生成 16 字节哈希时,您可以尝试以下操作:

1)自己生成41字节哈希(使用一些哈希生成器网站)例如密码:'qwerty'哈希:'aa1420f182e88b9e5f874f6fbe7459291e8f4601'

2) 更改密码 SET PASSWORD FOR 'username' = '*aa1420f182e88b9e5f874f6fbe7459291e8f4601'

现在您应该能够使用新的身份验证方法连接到数据库

于 2011-04-23T11:45:44.720 回答
0

我几乎尝试了这里(和其他地方)列出的所有内容,直到我发现这个:

SET old_passwords = 0; UPDATE mysql.user SET Password = PASSWORD('testpass') WHERE User = 'testuser' limit 1; SELECT LENGTH(Password) FROM mysql.user WHERE User = 'testuser'; 同花顺特权;

将其放入您的 mysql 客户端或 phpmyadmin 并将 testpass 更改为您的数据库登录密码,将 testuser 更改为您的数据库登录用户,执行查询。巨大的成功!问题解决了。

于 2011-03-28T21:08:01.013 回答