PHP与数据库连接是Web开发中的核心操作,通常通过扩展库(如MySQLi或PDO)实现,以下是详细的连接步骤和注意事项,涵盖主流数据库(如MySQL)的连接方法。

确保PHP环境已安装相应的数据库扩展,MySQLi(MySQL Improved)是专门为MySQL设计的扩展,而PDO(PHP Data Objects)支持多种数据库(如MySQL、PostgreSQL、SQLite等),连接前需确认数据库服务器地址、用户名、密码、数据库名等参数。
基本连接步骤
-
创建连接对象
- MySQLi方式(面向过程):
$conn = mysqli_connect("localhost", "username", "password", "database_name"); if (!$conn) { die("连接失败: " . mysqli_connect_error()); }
- MySQLi方式(面向对象):
$conn = new mysqli("localhost", "username", "password", "database_name"); if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); }
- PDO方式:
try { $conn = new PDO("mysql:host=localhost;dbname=database_name", "username", "password"); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { die("连接失败: " . $e->getMessage()); }
- MySQLi方式(面向过程):
-
设置字符集
为避免中文乱码,需设置连接字符集为UTF-8:mysqli_set_charset($conn, "utf8"); // MySQLi $conn->exec("SET NAMES utf8"); // PDO
-
执行SQL查询
连接成功后,可通过mysqli_query()
或PDO::query()
执行SQL语句。(图片来源网络,侵删)$result = mysqli_query($conn, "SELECT * FROM users"); // MySQLi $stmt = $conn->query("SELECT * FROM users"); // PDO
-
处理结果集
- MySQLi:
while ($row = mysqli_fetch_assoc($result)) { print_r($row); }
- PDO:
foreach ($stmt as $row) { print_r($row); }
- MySQLi:
-
关闭连接
mysqli_close($conn); // MySQLi $conn = null; // PDO
常见连接参数说明
参数 | 说明 | 示例值 |
---|---|---|
host | 数据库服务器地址 | "localhost"或"127.0.0.1" |
username | 数据库用户名 | "root" |
password | 数据库密码 | "your_password" |
dbname | 数据库名称 | "test_db" |
charset | 字符集(可选) | "utf8" |
注意事项
- 安全性:避免将数据库密码硬编码在脚本中,建议使用配置文件或环境变量存储敏感信息。
- 错误处理:PDO的
ERRMODE_EXCEPTION
模式会抛出异常,便于捕获和处理错误。 - 连接池:高并发场景下,可考虑使用连接池(如Swoole)优化性能。
- SSL连接:生产环境建议启用SSL加密数据库连接。
相关问答FAQs
Q1: PHP连接数据库时提示“Access denied”错误,如何解决?
A: 该错误通常由用户名或密码错误、权限不足或IP白名单限制导致,检查以下内容:
- 确认数据库用户名和密码正确;
- 登录MySQL执行
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
授权; - 若远程连接,确保数据库服务器的防火墙允许端口(如3306),并检查用户IP是否在白名单中。
Q2: PDO和MySQLi如何选择?什么场景下更适合使用?
A: 两者功能相似,选择依据如下:

- PDO:支持多种数据库(如SQLite、Oracle),适合需要跨数据库迁移的项目;默认启用预处理语句,防SQL注入更安全。
- MySQLi:仅支持MySQL,性能略优;面向对象和过程式语法可选,适合纯MySQL环境。
推荐优先使用PDO,因其灵活性和安全性更高;若项目仅使用MySQL且追求极致性能,可考虑MySQLi。