本文概述
- 什么是PDO?
- PDO的优势
- 使用PDO的好处
- PDO类别
- PDO支持的数据库
- PDO与MySQLi的比较
- 在PDO或MySQLi之间应该首选哪个?
- 需求
- 安装过程
- 使用PDO
- 数据库连接
- 处理连接错误
- 关闭数据库连接
PHP是一种开源通用脚本语言, 被广泛用于创建动态和交互式网页。 PHP可以访问各种关系数据库管理系统, 例如MYSQL, SQLite和PostgreSQL。 PHP 5.1版本提供了一个新的数据库连接抽象库, 即PHP数据对象(PDO)。
什么是PDO?
PDO指PHP数据对象, 它是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调用接口, Firebird / Interbase 6和PostgreSQL数据库等。
驱动程序并非在每个系统中都自动可用, 因此我们必须找到可用的驱动程序并在需要时添加它们。
数据库连接
有多种语法可用于建立数据库连接。这些语法取决于特定的数据库。使用PDO时, 必须将操作包装在try / catch块中, 并利用异常技术。
通常, 只需要创建一个连接, 就可以通过将数据库编程为空来关闭这些连接。
错误处理
PDO允许使用异常进行错误处理。为了产生异常, 可以将PDO强制设置为相关的错误模式属性。
共有三种错误模式, 即”静音”(默认), “警告”和”异常”。警告和异常在DRY编程中更有用。
- 静音-这是默认错误模式。
- 警告-这对于调试很有用。
- 例外-此模式允许进行优美的错误处理, 同时隐藏一个人可能用来利用你的系统的数据。
插入和更新
PDO将常用的插入和更新数据库操作简化为两步过程, 即
准备>> [绑定] >>执行。
通过这种方法, 我们可以充分利用PDO的准备好的语句, 该语句通过SQL注入防止恶意攻击。
预准备语句是预编译的SQL语句, 可以通过将该数据发送到服务器来多次执行。在占位符中使用的该数据会自动受到SQL注入攻击的保护。
使用PDO的好处
PDO是本机数据库驱动程序。使用PDO有一些好处, 如下所示:
- 可用性-它包含许多辅助功能, 可进行自动例行操作。
- 可重用性-它提供了访问多个数据库的统一API。
- 安全性-它使用准备好的语句来防止SQL注入。预准备语句是预编译的SQL语句, 它将SQL语句的指令与数据分开。
PDO类别
有以下三种PDO类:
- PDO-表示PHP与数据库之间的连接。
- PDOStatement-它代表准备好的语句, 并在语句执行后设置关联的结果。
- PDOException-它表示由PDO引发的错误。
PDO支持的数据库
- MySQL
- PostgreSQL的
- 甲骨文
- 火鸟
- MS SQL服务器
- Sybase公司
- Informix
- IBM公司
- FreeTDS
- SQLite的
- 笨拙的
- 4D
PDO与MySQLi的比较
要使用PHP访问数据库, 我们主要有两个选项-MySQLi和PDO(PHP数据对象)。 MySQLi是PHP的本机, 可提供更快的性能, 而大多数有经验的开发人员更喜欢使用PDO, 因为它支持多种数据库驱动程序。下面根据功能列出了PDO和MySQLi之间的差异。
Features | PDO | MySQLi |
---|---|---|
DB Support | 12种不同的驱动程序 | MySQL only |
Connection | Easy | Easy |
API | OOP | OOP +程序 |
Performance | Fast | Fast |
Named Parameter | Yes | No |
Object mapping | Yes | Yes |
储存程序 | Yes | Yes |
客户端准备的语句 | Yes | No |
Security | 比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服务器。
注意:这里我们将仅讨论Windows OS的安装过程。
步骤2:按照以下步骤在系统上安装XAMPP服务器。
步骤3:选择要安装的组件, 然后单击Next(下一步)按钮。
步骤4:在要安装XAMPP的位置创建一个名为xampp的新文件夹。
第5步:在此处单击下一步, 然后继续。 XAMPP服务器的安装将从此处开始。
步骤6:成功安装XAMPP。单击完成按钮。
步骤7:选择首选语言。
步骤8:从此处运行Apache服务器和MySQL(按照给定的屏幕截图)。
步骤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的数据库。
数据库连接
与数据库交互总是需要数据库连接。因此, 我们需要知道访问数据库的标识符, 即数据库的位置, 数据库名称, 用户名和密码。
现在, 在任何文本编辑器(例如记事本或notepad ++)中使用PDO创建数据库连接程序, 并使用coonection.php名称保存它。使用localhost / 80在XAMPP服务器上运行它。
例子
<?php
$dbHost="localhost";
$dbName="myDB";
$dbUser="root"; //by default root is user name.
$dbPassword=""; //password is blank by default
try{
$dbConn= new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUser, $dbPassword);
Echo "Successfully connected with myDB database";
} catch(Exception $e){
Echo "Connection failed" . $e->getMessage();
}
?>
输出
使用以下URL localhost / Xampp / pdoexample / connection.php /或在保存程序的位置在服务器上运行它。
处理连接错误
如果存在任何连接错误, 则将引发PDOException对象。如果要处理错误条件, 我们可以捕获异常, 或者也可以将其留给可以由set_exception_handler()函数设置的全局异常处理程序。
例子
在此示例中, dbUser(user-id)是错误的, 因此它将抛出异常, 正如我们在输出中看到的那样。
<?php
$dbHost="localhost";
$dbName="myDB";
$dbUser="rroot";
$dbPassword="";
try{
$dbConn= new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUser, $dbPassword);
//Set the PDO error mode to exception.
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Echo "Successfully connected with myDB database";
} catch(Exception $e){
Echo "Connection failed" . $e->getMessage();
}
?>
关闭数据库连接
<?php
$dbHost="localhost";
$dbName="myDB";
$dbUser="root"; //by default root is user name.
$dbPassword=""; //password is blank by default
try{
$dbConn= new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUser, $dbPassword);
Echo "Successfully connected with myDB database";
} catch(Exception $e){
Echo "Connection failed" . $e->getMessage();
}
// this command close the connection.
$dbConn = null;
?>
输出
评论前必须登录!
注册