Windows 7 PHP MySQL连接问题

时间:2011-01-26 16:28:59

标签: mysql windows-7 php mysql-connect

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

此计算机上的原始设置是XAMPP,其PHP版本已通过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 个答案:

答案 0 :(得分: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/

答案 1 :(得分:4)

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

set password = password('my password');

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

答案 2 :(得分:2)

当您想要更改密码并且服务器继续生成16个字节的哈希值时,您可以尝试如下:

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

2)更改密码 为'username'='* aa1420f182e88b9e5f874f6fbe7459291e8f4601'设置密码

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

答案 3 :(得分:0)

我尝试了这里列出的所有内容(以及其他地方)无济于事,直到我找到了这个:

SET old_passwords = 0; UPDATE mysql.user SET Password = PASSWORD('testpass')WHERE User ='testuser'limit 1; SELECT LENGTH(密码)FROM mysql.user WHERE User ='testuser'; FLUSH PRIVILEGES;

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