我使用 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 身份执行此操作!