我正在尝试访问第三方数据库并出现以下错误:
警告:mysql_pconnect():mysqlnd无法使用旧的不安全身份验证连接到MySQL 4.1+。
但我可以使用以下命令通过命令提示符访问数据库:
mysql -uTheUseerNAme -pThePassword DbName -h HostName --skip-secure-auth
注意:在上面的命令中,我使用--skip-secure-auth
来访问数据库。但现在我的问题是我们可以在php中同时使用config.php文件中的数据库连接吗?
答案 0 :(得分:1)
对于较新版本的PHP(5.6)和mysqli驱动程序,连接MySQL服务器的默认设置是使用安全授权(TLS)。看来,当使用较旧的MySQL服务器时,这将失败。
似乎没有办法从PHP中禁用连接上的身份验证。
目前的解决方法是将其添加到MySQL服务器配置中(通常位于/etc/mysql/my.cnf或/etc/my.cnf中)。
[mysqld]
skip-secure-auth
这将从服务器端禁用安全身份验证,迫使较新的客户端(例如,新版本的PHP / mysqli)在连接时跳过安全身份验证,在所有连接的客户端上有效地复制--skip-secure-auth。
作为一种可能的解决方法而不更改MySQL服务器配置,似乎有一个MYSQLI_OPT_SSL_VERIFY_SERVER_CERT选项可以通过mysqli_options()在mysqli连接实例上设置。
mysqli_options($conn, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, false);
将此设置为false 应该 会产生您要查找的行为,尽管有报告说这不起作用,而且在我们的测试中它没有事实上的工作。
似乎有一个更新被推送到PHP 5.6.16及更高版本,它解决了这个问题。我的猜测是你在PHP 5.6.0和5.6.15之间运行。