推荐使用PDO连接MySQL,因其支持预处理语句、多数据库兼容及更好的安全性。示例中通过设置异常模式、utf8mb4字符集和禁用模拟预处理,确保安全与可维护性;MySQLi适用于纯MySQL项目,但PDO更利于长期扩展。

PHP连接MySQL数据库最推荐的方式是使用PDO(PHP Data Objects)或MySQLi的面向对象模式。这两种方式都支持预处理语句,能有效防止SQL注入,提升应用安全性。从兼容性和功能扩展性来看,PDO更受推荐,尤其适合需要支持多种数据库的项目。
使用PDO连接MySQL(推荐做法)
PDO提供统一的数据库接口,支持多种数据库,代码可移植性强。以下是一个安全、可复用的PDO连接示例:
try {
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';
$charset = 'utf8mb4';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";
$pdo = new PDO($dsn, $username, $password, $options);} catch (PDOException $e) {
throw new PDOException($e->getMessage(), (int)$e->getCode());
}
说明与建议:
- 设置
PDO::ATTR_ERRMODE为EXCEPTION,便于捕获数据库错误 - 使用
utf8mb4字符集,完整支持Emoji和四字节UTF-8字符 - 关闭预处理模拟
PDO::ATTR_EMULATE_PREPARES,确保真实预处理,增强安全性 - 将连接参数存入配置文件或环境变量,避免硬编码
使用MySQLi面向对象方式连接
MySQLi专为MySQL设计,功能丰富,适用于只使用MySQL的项目:
立即学习“PHP免费学习笔记(深入)”;
$host = 'localhost'; $dbname = 'your_database'; $username = 'your_username'; $password = 'your_password';$mysqli = new mysqli($host, $username, $password, $dbname);
if ($mysqli->connect_error) { die('连接失败: ' . $mysqli->connect_error); }
$mysqli->set_charset('utf8mb4');
Difeye-敏捷的轻量级PHP框架下载Difeye是一款超轻量级PHP框架,主要特点有: Difeye是一款超轻量级PHP框架,主要特点有: ◆数据库连接做自动主从读写分离配置,适合单机和分布式站点部署; ◆支持Smarty模板机制,可灵活配置第三方缓存组件; ◆完全分离页面和动作,仿C#页面加载自动执行Page_Load入口函数; ◆支持mysql,mongodb等第三方数据库模块,支持读写分离,分布式部署; ◆增加后台管理开发示例
注意点:
- 务必检查
connect_error,避免静默失败 - 手动调用
set_charset确保字符编码一致 - 执行查询时优先使用
prepare()方法防止SQL注入
安全操作数据库查询
无论使用PDO还是MySQLi,都应使用预处理语句处理用户输入:
PDO示例:
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);
$user = $stmt->fetch();
MySQLi示例:
$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc();
基本上就这些。选择PDO更适合长期维护和扩展,MySQLi则在纯MySQL环境中表现良好。关键是始终使用预处理,管理好连接生命周期,不复杂但容易忽略。











