Rumah  >  Artikel  >  Topik  >  通过PDO扩展与MySQL数据库交互实现基本使用

通过PDO扩展与MySQL数据库交互实现基本使用

coldplay.xixi
coldplay.xixike hadapan
2020-09-08 13:49:182766semak imbas

通过PDO扩展与MySQL数据库交互实现基本使用

相关学习推荐:mysql教程php编程

在上篇教程中,给大家介绍了如何通过 PHP 内置的 Mysqli 扩展与 MySQL 数据库交互,今天我们来看看另一个 PHP 内置的数据库扩展 —— PDO,其全称是 PHP Data Objects,即 PHP 数据对象。

PDO 简介与安装

PDO 为 PHP 访问数据库定义了一个轻量级的一致接口,因此它提供的是一个数据访问抽象层,本身并不能实现任何数据库交互功能,必须使用一个具体数据库的 PDO 驱动来访问数据库服务,这些具体数据库驱动包括 MySQL、PostgreSQL、SQLite、SQL Server、Oracle 等,因此 PDO 是一个更加标准、更加通用的数据库扩展,而且完全是面向对象风格的,目前,在各个主流 PHP 框架中,PDO 已经成为了构建数据库交互的基础组件,包括 Laravel 框架,也是基于 PDO 扩展提供数据库访问功能。

我们之前推荐的 PHP 本地集成开发环境都集成了对 PDO 扩展的支持(以下是 Laragon 预装的 PHP 扩展):

PHP 扩展

并且可以看到,除了 PDO 扩展外,还有一个与之匹配的具体数据库扩展 pdo_mysql,有了这个具体扩展,才能访问 MySQL 数据库。另外,PDO 提供了统一的数据库访问接口,所以实现了 PDO 接口的具体数据库扩展可以通过完全一样的方法访问数据库,这样一来,如果应用需要切换数据库,就不需要对数据库操作代码进行重构,仅凭这一点,就可以扔掉 MySQLi 扩展,投入 PDO 的怀抱了。

如果安装过 Laradock,可以启动 workspace 容器,然后查看其预装的 PHP 扩展,可以看到,它包含更多的具体 PDO 数据库驱动支持:

PHP 扩展

其中 pdo_pgsql 表示 PostgresSQL 数据库驱动,pdo_sqlite 表示 SQLite 数据库驱动。

建立数据库连接与基本查询

在我们的教程中,还是选择以 MySQL 为例进行演示。

要通过 PDO 扩展建立数据库连接,直接实例化 PDO 对象即可,我们编写一段简单的示例代码如下(在 php_learning/mysql 目录下新建 pdo.php 存储代码):

<?php

// 设置连接属性
$dsn = &#39;mysql:host=127.0.0.1;port=3306;dbname=test;charset=utf8mb4&#39;;
$user = &#39;root&#39;;
$pass = &#39;root&#39;;

try {
    // 建立连接
    $pdo = new PDO($dsn, $user, $pass);
    // 执行 SQL 查询
    $sql = $pdo->quote(&#39;SELECT * FROM `post` ORDER BY `id` DESC&#39;);
    $res = $pdo->query($sql);
    // 打印查询结果
    echo &#39;<pre class="brush:php;toolbar:false">&#39;;
    foreach ($res as $row) {
        print_r($row);
    }
} catch (PDOException $exception) {
    // 如果数据库操作出现异常,则捕获并打印
    printf("Error: %s\n", $exception->getMessage());
} finally {
    // 释放 PDO 连接实例
    $pdo = null;
}

在实例化 PDO 对象创建数据库连接时,至少需要传入三个字符串类型参数,第一个参数包含了数据库主机信息,比如数据库驱动类型(这里是 mysql)、IP地址(本地地址是 127.0.0.1)、端口号(可选,默认是 3306)、要连接的数据库名称(test)、字符编码信息(utf8mb4)等,第二个参数是用户名,第三个参数是密码。

接下来,我们就可以调用 PDO 对象实例 $pdo 上的 query 方法执行指定 SQL 语句与数据库进行交互了(增删改查),不过在此之前,我们先调用了 quote 方法对查询 SQL 语句进行转义,该函数的功能类似 mysqli_escape_string

执行完 SQL 查询后,会返回一个查询结果集,可以通过循环遍历打印该结果。

此外,通过 PDO 扩展进行数据库连接和查询操作如果出现错误,会抛出异常,为了增加程序的健壮性,我们在通过 try...catch... 语句捕获 PDOException 异常,并打印错误信息,最后通过 finally 语句释放 PDO 对象实例,因为该语句块不管是否抛出异常都会执行。

运行 php -S localhost:9000 启动内置 HTTP 服务器进行测试,在浏览器中访问 http://localhost:9000/mysql/pdo.php,即可看到正常的打印结果:

数据库查询结果

我们修改下上述代码中的连接信息,比如将密码值调整为 test,这个时候就会捕获到 PDO 异常,并打印错误消息:

数据库连接出错

注:错误信息中的 IP 地址是 MySQL Docker 容器内部的 IP 地址。可以忽略,这个报错是密码错误,而不是 IP 地址的问题。

想了解更多相关文章,敬请关注php mysql栏目!

Atas ialah kandungan terperinci 通过PDO扩展与MySQL数据库交互实现基本使用. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:xueyuanjun.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam