Mar*_*las 4 mysql php mysql-5.5
我使用 PHP 5.4.3,我想使用普通的面向对象编程 (OOP) 方式远程连接到 MySQL 数据库(为了简洁起见,DB)(PHP 脚本驻留在与 DB 不同的服务器上):
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
Run Code Online (Sandbox Code Playgroud)
我收到错误:
警告:mysqli::mysqli():服务器请求客户端未知的身份验证方法 [mysql_old_password] 连接错误 (2054) 服务器请求客户端未知的身份验证方法
我找到了这个和这个,但它们似乎没有帮助。我使用 PHP 5.2.9,一切正常,但降级 PHP 版本对我来说不是一个解决方案。
我还必须提到,我没有对数据库设置的完全访问权限,因为客户端没有给我这种访问权限。我告诉他向 Hostgator 请求更新的密码格式支持,但他们回答说他们不能做任何超出我预期的事情。我从另一台远程服务器做了一项新的努力,现在我得到了:
连接错误 (1045) 用户“用户”@“主机”的访问被拒绝(使用密码:YES)
使用 PHP 5.3.9。由于远程服务器的 PHP 脚本,数据库似乎没有“让我进入”,但使用 Oracle 的 Workbench 一切正常。
谢谢你的时间。
PHP 肯定希望使用旧的 MySQL 身份验证插件算法。您不必重新启动 mysql。由于old_passwords是全局动态选项,因此您所要做的就是运行以下命令:
SET GLOBAL old_passwords = 1;
Run Code Online (Sandbox Code Playgroud)
另外,请将其添加到/etc/my.cnf
:
[mysqld]
old_passwords=1
Run Code Online (Sandbox Code Playgroud)
以便将来重新启动时保留此设置。
为了进一步验证是否需要这样做,下次登录mysql时,运行这个
SELECT LENGTH(password) password_length,COUNT(1) length_count
FROM mysql.user GROUP BY LENGTH(password);
Run Code Online (Sandbox Code Playgroud)
如果没有一个密码长度为 16,这可能解释了 PHP 不愿登录的原因。
遗憾的是,另一种选择是设置 16 个字符的密码,但您无法对 41 个字符的密码进行逆向工程。您必须使用原始纯文本值手动设置 16 个字符的密码。
例如,如果 root@localhost 将“helloworld”作为密码,它将使用OLD_PASSWORD函数对其进行转换。这是一个比较:
mysql> select password('helloworld');
+-------------------------------------------+
| password('helloworld') |
+-------------------------------------------+
| *D35DB127DB631E6E27C6B75E8D376B04F64FAF83 |
+-------------------------------------------+
1 row in set (0.00 sec)
mysql> select old_password('helloworld');
+----------------------------+
| old_password('helloworld') |
+----------------------------+
| 6c755a9e66debe8a |
+----------------------------+
1 row in set (0.00 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
一旦激活old_passwords,要转换它,您必须执行以下操作:
UPDATE mysql.user
SET password = OLD_PASSWORD('helloworld')
WHERE password = PASSWORD('helloworld');
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
如果此时更改 MySQL 端的身份验证方式对您不起作用,那么我有一些坏消息要告诉您。您之前说过:
我使用 php 5.2.9,一切正常,但降低 php 对我来说不是一个解决方案。我还必须提到,我没有对数据库设置的完全访问权限,因为客户端没有给我完全访问权限。
毕竟您可能需要降级 PHP。如果您的托管提供商没有能力或不愿意调整 MySQL 或为您提供降级的 PHP,您将不得不选择愿意的托管提供商。
作为替代方案,当您可以在运行后完全控制所有软件升级时,您可能需要考虑 Amazon EC2 sudo -s
。您之前提到的链接为您提供了您需要了解的信息。我向您介绍了如何适应 MySQL 方面。做你知道必须做的事情来解决这个问题。
归档时间: |
|
查看次数: |
43021 次 |
最近记录: |