本节我们将详细介绍如何通过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_SILENT0静默模式,不报错,需手动检查
PDO::ERRMODE_WARNING1警告模式,显示警告但继续执行
PDO::ERRMODE_EXCEPTION2异常模式,抛出异常停止执行

强烈推荐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数据库连接成功!”就表示数据库连接成功了!,像这样:

PDO数据库连接成功!

2.2 MySQLi连接数据库:

其连接模式如下:

2.2.1 面向对象风格:

$mysqli = new mysqli('主机', '用户', '密码', '数据库名', 端口);
// 连接后需要检查 $mysqli->connect_error

2.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数据库连接成功!”这句话,像这样:

MySQLi连接数据库

总结:本节我们学习了如何通过PHP连接数据库,包括两种方法——PDO和MySQLi,但是笔者推荐PDO操作数据库,因为它更简单、适用面广。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)