PHP 无法连接到 Linux 上的数据库?

PHP 无法连接到 Linux 上的数据库?

我使用 mariadb 作为数据库,并使用 phpmyadmin 访问 Linux 上的数据库网站。虽然我能够以 root 身份在命令行上连接到数据库,但无法使用 PHP 检查与数据库的连接?我不确定我是否遗漏了什么?

我的 HTML/PHP 代码:

<!DOCTYPE HTML>
<html>
<body>
        <?php
        $host = 'localhost';
        $user = root';
        $password = '';
        $db = 'testdb';

        $dbconnect=mysqli_connect($host,$user,$password,$db);

        if ($dbconnect->connect_error) {
                die("Database connection failed.");
        }

        ?>

</body>
</html>

我的网页显示的内容:

"connect_error) { die("数据库连接失败:" . $dbconnect->connect_error); } ?> "

我尝试过的:

  • 更改为bind-address 0.0.0.0
  • 允许port 3306通过防火墙。

仍是同样的显示。

答案1

除了 PHP 问题之外,这里还有一个根本问题。

可以使用不同的 MySQL 身份验证方法。以下是相关的方法:

  • 用户名密码
  • 套接字身份验证

MySQL 通常配置为使用套接字身份验证来对root用户进行身份验证。在这种情况下,这意味着命令行工具使用 UNIX 域套接字连接到服务器,服务器可以通过检查套接字另一端的用户来检查谁在连接。

这意味着只有以 身份运行的进程root才能通过 UNIX 域套接字连接到 MySQL 服务器。

您的 Web 服务器正在另一个用户下运行,因此无法使用该root帐户。因此,您必须为您的 Web 服务器/PHPMyAdmin 创建另一个用户/密码。

答案2

一旦您修复了语法错误$user = root';...

摘自 MySQL 8.0 参考手册  4.2.4 使用命令选项连接 MySQL 服务器

在 Unix 上,MySQL 程序对主机名进行 localhost特殊处理,与其他基于网络的程序相比,这种方式可能与您预期的不同:客户端使用 Unix 套接字文件进行连接。 可以使用--socket 选项或 MYSQL_UNIX_PORT 环境变量来指定套接字名称。

由于 PHP 不执行此操作,MySQL 服务器无法确定用户。因此,您必须使用密码验证。另外,为了安全起见,请不要以 root 身份执行此操作!

相关内容