本节我们将详细介绍如何通过PHP连接我们的数据库。
总的来说,我们有三种方法来连接我们的数据库。下面我们通过一张表格来总览一下具体有哪些方法:
| 方式 | 特点 | PHP版本 | 推荐度 |
|---|---|---|---|
| PDO | 支持多种数据库、防SQL注入、面向对象 | PHP 5.1+ | 最推荐 |
| MySQLi | 只支持MySQL、性能较好 | PHP 5.0+ | 推荐 |
| mysql扩展 | 已废弃,不要使用 | PHP 5.5废弃 | 不要用 |
我们主要讨论PDO(php database object)和MySQLi这两种方法:
1. 选哪个?
对于绝大多数PHP开发者,强烈推荐选择PDO。PDO提供了真正统一、面向对象的数据库操作接口,支持多种数据库且具备更好的安全特性(如真正的预处理语句),这使得代码更清晰、更易维护且具备良好的可移植性——即便项目未来需要迁移到PostgreSQL或SQLite等其他数据库,也只需修改连接字符串而无需重写大量代码。虽然MySQLi在纯MySQL环境中有微弱的性能优势,但这在大多数实际应用中微不足道。
2. 怎么用?
2.1 PDO连接数据库:
其连接模式如下:
$pdo = new PDO('类型:主机=值;数据库=名', '用户', '密码', [PDO::ATTR_ERRMODE =>错误模式]);这里错误模式选填,但是为了调试,最好增加错误模式这个数组,该数组可填:
| 常量 | 值 | 行为 |
|---|---|---|
| PDO::ERRMODE_SILENT | 0 | 静默模式,不报错,需手动检查 |
| PDO::ERRMODE_WARNING | 1 | 警告模式,显示警告但继续执行 |
| PDO::ERRMODE_EXCEPTION | 2 | 异常模式,抛出异常停止执行 |
强烈推荐PDO::ERRMODE_EXCEPTION(2),这样的话能够最快亡羊补牢。
具体演示如下:
<?php /* PDO连接数据库 */ //1. 数据库配置变量 $host = '127.0.0.1'; // 数据库地址 $dbname = 'dotcpp'; // 数据库名 $username = 'dotcpp'; // 用户名 $password = 'dotcpp'; // 密码 $dsn = "mysql:host=$host;dbname=$dbname";//数据库源 $pdo = new PDO($dsn, $username, $password, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]); echo 'PDO数据库连接成功!'; ?>
如果能够正常输出这句话“PDO数据库连接成功!”就表示数据库连接成功了!,像这样:

2.2 MySQLi连接数据库:
其连接模式如下:
2.2.1 面向对象风格:
$mysqli = new mysqli('主机', '用户', '密码', '数据库名', 端口);
// 连接后需要检查 $mysqli->connect_error2.2.2面向过程风格:
$conn = mysqli_connect('主机', '用户', '密码', '数据库名', 端口);
// 连接后需要检查 mysqli_connect_error()指的注意的是: MySQLi没有统一的错误模式配置,需要手动检查连接状态。
具体演示一下MySQLi面向对象风格的连接方式:
<?php
/* MySQLi连接数据库 - 面向对象风格 */
// 1. 数据库配置变量
$host = '127.0.0.1'; // 数据库地址
$dbname = 'dotcpp'; // 数据库名
$username = 'dotcpp'; // 用户名
$password = 'dotcpp'; // 密码
$port = 3306; // 端口号(默认3306)
// 2. 创建连接
$mysqli = new mysqli($host, $username, $password, $dbname, $port);
// 3. 检查连接(必须!)
if ($mysqli->connect_error) {
die("MySQLi连接失败: " . $mysqli->connect_error);
}
// 4. 设置字符集(防止中文乱码)
$mysqli->set_charset("utf8mb4");
echo 'MySQLi数据库连接成功!';
?>如果MySQLi连接数据库成功,test.php页面会出现“MySQLi数据库连接成功!”这句话,像这样:

总结:本节我们学习了如何通过PHP连接数据库,包括两种方法——PDO和MySQLi,但是笔者推荐PDO操作数据库,因为它更简单、适用面广。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程