如何在 PHP 中连接 MySQL 数据库
在 PHP 中连接 MySQL 数据库主要有两种主流方式:
- 使用 MySQLi(面向过程或面向对象)
- 使用 PDO(PHP Data Objects)(推荐,支持更多数据库)
以下是完整配置方法 + 示例代码 + 安全建议 + 权威文档链接,适用于本地开发或服务器部署(如 Mac、Linux、Windows、Docker 环境等)。
一、前提准备
你需要:
- 已安装 PHP(建议 7.4+)
- 已安装并启动 MySQL(或 MariaDB)
- 拥有数据库连接信息:
- 主机名(如
localhost) - 用户名(如
root) - 密码(如
root) - 数据库名(如
testdb)
如果你是 Docker 用户,可通过
docker-compose启动mysql服务并连接到db容器。
二、方法一:使用 mysqli 连接(面向过程)
示例代码
<?php
$host = "localhost";
$user = "root";
$pass = "root";
$dbname = "testdb";
$conn = mysqli_connect($host, $user, $pass, $dbname);
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
echo "✅ 成功连接到 MySQL 数据库!";
// 查询示例
$result = mysqli_query($conn, "SELECT * FROM users");
while ($row = mysqli_fetch_assoc($result)) {
echo $row['name'] . "<br>";
}
mysqli_close($conn);
三、方法二:使用 PDO 连接(推荐)
示例代码(推荐用于现代开发)
<?php
$host = "localhost";
$dbname = "testdb";
$user = "root";
$pass = "root";
try {
$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // 错误抛异常
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC // 默认关联数组
]);
echo "✅ 成功连接到 MySQL 数据库!";
// 查询示例
$stmt = $pdo->query("SELECT * FROM users");
foreach ($stmt as $row) {
echo $row['name'] . "<br>";
}
} catch (PDOException $e) {
echo "❌ 数据库连接失败: " . $e->getMessage();
}
四、MySQL 用户和数据库创建命令(命令行)
CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password123';
GRANT ALL PRIVILEGES ON testdb.* TO 'user1'@'localhost';
FLUSH PRIVILEGES;
五、连接参数说明
| 参数 | 含义 | 示例 |
|---|---|---|
host | 数据库主机名 | localhost / 127.0.0.1 / db(容器) |
user | 登录用户名 | root / app_user |
password | 登录密码 | 123456 |
dbname | 连接的数据库名 | testdb |
charset | 字符集(建议使用) | utf8mb4 |
六、连接测试建议
- 使用
phpinfo()查看mysqli和PDO是否启用 - 使用
telnet localhost 3306测试端口是否开启 - Docker 用户需注意容器名称与网络连接(可用 host 为
db)
七、安全建议
| 建议 | 原因 |
|---|---|
| 使用 PDO 并开启异常模式 | 便于错误捕获与调试 |
| 使用预处理语句 | 防止 SQL 注入攻击 |
| 不暴露 root 用户于生产环境 | 使用最小权限账号 |
| 不将密码硬编码 | 使用 .env 环境文件或配置文件 |
八、权威参考链接
九、快速问题排查
| 问题 | 原因与解决 |
|---|---|
Access denied for user | 用户或密码错误 / 未授权 |
Can't connect to MySQL server | MySQL 未运行 / 主机错误 |
Class 'PDO' not found | 没安装 PDO 扩展:brew install php 或 docker-php-ext-install pdo |
| 中文乱码 | 设置 charset=utf8mb4 且数据库表使用相同编码 |
更多详细内容请关注其他相关文章!