PHP 入门教程
PHP 连接 MySQL
本教程共 65 篇 · 第 48 篇 · 更新于 2026-07-24 · 约 7 分钟阅读
PHPPHP8MySQLmysqli数据库连接utf8mb4
48. PHP 连接 MySQL
本节目标:掌握
mysqli扩展的用法,能够使用面向对象和过程式两种方式连接 MySQL 数据库。
PHP 提供了多种方式连接 MySQL。本节重点讲解 mysqli(MySQL Improved)扩展,它是现代 PHP 项目的标准选择。
1. 为什么选择 mysqli
| 扩展 | 状态 | 说明 |
|---|---|---|
mysql | 已移除 | PHP 5.5 起废弃,PHP 7.0 起移除 |
mysqli | 推荐 | 支持面向对象和过程式,功能完善 |
PDO | 推荐 | 数据库抽象层,支持多种数据库(详见第 49 章) |
mysqli 比旧版 mysql 扩展更安全,支持预处理语句和事务。
2. 面向对象方式连接
这是推荐的写法,代码更清晰。
<?php
$host = 'localhost';
$username = 'root';
$password = '123456';
$database = 'my_app';
// 创建连接
$mysqli = new mysqli($host, $username, $password, $database);
// 检查连接
if ($mysqli->connect_error) {
die('连接失败: ' . $mysqli->connect_error);
}
echo '连接成功';
// 设置字符集
$mysqli->set_charset('utf8mb4');
// 关闭连接
$mysqli->close();
Tip始终设置
utf8mb4字符集,确保能正确存储中文和 emoji。
3. 过程式方式连接
过程式风格使用函数调用,与旧版 mysql_* 函数类似。
<?php
$host = 'localhost';
$username = 'root';
$password = '123456';
$database = 'my_app';
// 创建连接
$mysqli = mysqli_connect($host, $username, $password, $database);
// 检查连接
if (!$mysqli) {
die('连接失败: ' . mysqli_connect_error());
}
echo '连接成功';
// 设置字符集
mysqli_set_charset($mysqli, 'utf8mb4');
// 关闭连接
mysqli_close($mysqli);
4. 两种风格对比
| 操作 | 面向对象 | 过程式 |
|---|---|---|
| 连接 | new mysqli(...) | mysqli_connect(...) |
| 执行查询 | $mysqli->query(...) | mysqli_query($mysqli, ...) |
| 获取错误 | $mysqli->error | mysqli_error($mysqli) |
| 关闭连接 | $mysqli->close() | mysqli_close($mysqli) |
| 获取行数 | $result->num_rows | mysqli_num_rows($result) |
Note面向对象风格更符合现代 PHP 编程习惯,推荐优先使用。过程式风格在维护老项目时可能遇到。
5. 完整查询示例
<?php
$mysqli = new mysqli('localhost', 'root', '123456', 'my_app');
if ($mysqli->connect_error) {
die('连接失败: ' . $mysqli->connect_error);
}
$mysqli->set_charset('utf8mb4');
// 执行查询
$result = $mysqli->query("SELECT id, username, email FROM users LIMIT 5");
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo "ID: {$row['id']}, 用户: {$row['username']}, 邮箱: {$row['email']}<br>";
}
} else {
echo '没有数据';
}
$result->free(); // 释放结果集
$mysqli->close();
6. 常见连接错误
| 错误信息 | 原因 | 解决 |
|---|---|---|
Connection refused | MySQL 服务未启动 | 启动 MySQL 服务 |
Access denied | 用户名或密码错误 | 检查凭据 |
Unknown database | 数据库不存在 | 先创建数据库 |
Class mysqli not found | 未安装 mysqli 扩展 | 在 php.ini 中启用 extension=mysqli |
小结
mysqli 扩展是 PHP 连接 MySQL 的基础。面向对象写法更现代,但两种风格的核心概念相同。下一节将介绍功能更强大的 PDO 扩展(第 49 章)。
来源:参考了 runoob「PHP MySQL 连接」、php-the-right-way、PHP 官方文档,改写后所得。