PHP PDO 简介

2024年11月13日 | 阅读 6 分钟

PHP 是一种开源的通用脚本语言,广泛用于创建动态和交互式网页。PHP 可以访问各种关系型数据库管理系统,例如 MySQL、SQLitePostgreSQLPHP 5.1 版本提供了一个新的数据库连接抽象库,即 PHP Data Objects (PDO)。

什么是 PDO?

PDO 指的是 PHP Data Object,它是一个 PHP 扩展,为 PHP 中的数据库访问定义了一个轻量级且一致的接口。它是一组 PHP 扩展,提供了一个核心 PDO 类和特定于数据库的驱动程序。每个数据库驱动程序都可以通过实现 PDO 接口的常规扩展函数来公开特定于数据库的功能。

注意:我们无法通过 PDO 扩展本身执行任何类型的数据库函数。要访问数据库服务器,我们必须使用特定于数据库的 PDO 驱动程序。

PDO 主要关注数据访问抽象,而不是数据库抽象。它提供了一个数据访问抽象层,这意味着,无论我们使用哪个数据库,我们都必须使用该数据库提供的相同函数来发出查询和获取数据。PDO 不提供数据抽象,因为它不会重写 SQL 或模拟缺失的功能。

PDO 的优势

PDO 提供了各种与对象交互的方式,并检索准备好的语句,从而使工作更加轻松。它是 PHP 中的一个数据库访问工具,通过它可以实现跨多个数据库的统一访问。

PDO 允许相对无缝地在不同数据库和平台之间切换,这可以通过更改连接字符串轻松实现。它不支持特定于数据库的语法。

PDO 的一些优点如下:

  • 数据库支持
    PDO 扩展可以访问任何为 PDO 驱动程序编写的数据库。有许多 PDO 驱动程序可用于 FreeTDS、Microsoft SQL Server、Sybase、IBM DB2、Oracle Call Interface、Firebird/Interbase 6PostgreSQL 数据库等。
    驱动程序并非在所有系统中都自动可用,因此我们需要查找可用的驱动程序并在需要时添加它们。
  • 数据库连接
    有不同的语法可用于建立数据库连接。这些语法取决于特定的数据库。在使用 PDO 时,操作必须包含在 try/catch 块中,并使用异常技术。
    通常,只需要创建一个连接,这些连接会通过编程将数据库设置为 null 来关闭。
  • 错误处理
    PDO 允许使用异常进行错误处理。为了生成异常,可以将 PDO 强制设置为相关的错误模式属性。
    有三种错误模式,即静默(默认)、警告异常。警告和异常在 DRY 编程中更有用。
    1. 静默 - 这是默认错误模式。
    2. 警告 - 这对于调试很有用。
    3. 异常 - 这种模式允许进行优雅的错误处理,同时隐藏可能被他人用来利用您的系统的数据。
  • 插入和更新
    PDO 将常用的插入和更新数据库操作减少为两步过程,即:
    准备 >> [绑定] >> 执行。
    通过这种方法,我们可以充分利用 PDO 的准备语句,这可以防止 SQL 注入等恶意攻击。
    准备语句是预编译的 SQL 语句,可以重复执行,方法是将数据发送到服务器。在占位符内使用的数据会自动防止 SQL 注入攻击。

使用 PDO 的好处

PDO 是原生数据库驱动程序。使用 PDO 有一些好处,如下所示:

  • 易用性 - 它包含许多辅助函数来执行自动例行操作。
  • 可重用性 - 它提供了统一的 API 来访问多个数据库。
  • 安全性 - 它使用准备语句来防止 SQL 注入。准备语句是一种预编译的 SQL 语句,它将 SQL 语句的指令与数据分开。

PDO 类

有三个 PDO 类,如下所示:

  • PDO - 它表示 PHP 和数据库之间的连接。
  • PDOStatement - 它表示准备好的语句,并在语句执行后设置关联的结果。
  • PDOException - 它表示 PDO 抛出的错误。

PDO 支持的数据库

  1. MySQL
  2. PostgreSQL
  3. Oracle
  4. Firebird
  5. MS SQL Server
  6. Sybase
  7. Informix
  8. IBM
  9. FreeTDS
  10. SQLite
  11. Cubrid
  12. 4D

PDO 和 MySQLi 之间的比较

要使用 PHP 访问数据库,我们主要有两种选择 - MySQLiPDO (PHP Data Object)。MySQLi 是 PHP 的原生支持,性能更快,而大多数有经验的开发人员更喜欢使用 PDO,因为它支持多种数据库驱动程序。PDO 和 MySQLi 之间在功能方面存在一些差异,如下所示:

特点PDOMySQLi
数据库支持12 种不同的驱动程序仅支持 MySQL
关系容易容易
APIOOP面向对象 + 过程式
性能快速快速
命名参数是的不能
对象映射是的是的
Stored Procedure是的是的
客户端准备语句是的不能
安全性比 MySQLi 更安全。安全,但不如 PDO。

PDO 或 MySQLi 之间应该选择哪个?

PDO 和 MySQLi 各有优势。

  • 如前所述,PDO 支持 12 种不同的数据库系统,而 MySQL 只能支持 MySQL 数据库。因此,如果我们想将项目切换到另一个数据库,PDO 可以轻松实现。而在 MySQLi 中,我们需要重写整个代码。
  • PDO 和 MySQLi 都是面向对象的,但 MySQLi 还提供过程式 API。两者都支持准备语句。准备语句对于 Web 应用程序安全很重要,因为它能防止 SQL 注入。

要求

构建此扩展无需外部库。

安装过程

步骤 1:在此处 https://www.apachefriends.org/download.html 下载适用于 Windows、Linux 和 MacOS 等不同平台的最新 XAMPP 服务器。

Phppdo

注意:此处我们仅讨论 Windows 操作系统的安装过程。

步骤 2:按照以下步骤在您的系统上安装 XAMPP 服务器。

Phppdo

步骤 3:选择您想安装的组件,然后单击“下一步”按钮。

Phppdo

步骤 4:在您想要安装 XAMPP 的位置创建一个名为 xampp 的新文件夹。

Phppdo

步骤 5:在此处单击“下一步”,然后继续。XAMPP 服务器的安装将从这里开始。

Phppdo

步骤 6:XAMPP 已成功安装。单击“完成”按钮。

Phppdo

步骤 7:选择首选语言。

Phppdo

步骤 8:从此处运行 Apache 服务器和 MySQL(根据提供的截图)。

Phppdo

步骤 9:现在,从 C:/xampp/php/php.ini(您安装 XAMPP 的位置)打开 php.ini,并取消注释扩展 "php_pdo_mysql.dll""php_pdo.dll"(如果您使用 MySQL 数据库),或者 "php_pdo_oci.dll"(如果您使用 Oracle 数据库)。现在,开始使用数据库。在 PHP 5.1 及更高版本中,它已默认设置。

使用 PDO

首先我们需要创建一个数据库,因此请在此处创建一个名为 myDB 的数据库。

Phppdo

数据库连接

与数据库交互总是需要数据库连接。因此,我们需要知道访问数据库的标识符,即数据库的位置、数据库名称、用户名和密码。

现在,在任何文本编辑器(如记事本或记事本++)中创建使用 PDO 的数据库连接程序,并将其保存为 connection.php。在 XAMPP 服务器上使用 localhost/80 运行它。

示例

输出

使用以下 URL localhost/Xampp/pdoexample/connection.php/ 或您保存程序的位置在服务器上运行它。

Phppdo

处理连接错误

如果发生任何连接错误,将抛出 PDOException 对象。我们可以选择捕获该异常来处理错误情况,或者也可以将其留给全局异常处理程序,该处理程序可以通过 set_exception_handler() 函数进行设置。

示例

在此示例中,dbUser(用户 ID)是错误的,因此它将抛出异常,如我们在输出中所见。

Phppdo

关闭数据库连接

输出

Phppdo