当我运行$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
答案 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
答案 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更改为您的数据库登录用户,执行查询。巨大的成功!问题解决了。