php之PDO
PHP PDO简介 PHP是一种开源通用脚本语言,被广泛用于创建动态和交互式网页。PHP可以访问各种关系数据库…
PHP PDO简介
PHP是一种开源通用脚本语言,被广泛用于创建动态和交互式网页。PHP可以访问各种关系数据库管理系统,例如MYSQL,SQLite和PostgreSQL。PHP5.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强制设置为相关的错误模式属性。
共有三种错误模式,即Silent (默认), Warning和Exception 。警告和异常在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 different drivers | MySQL only |
Connection | Easy | Easy |
API | OOP | OOP + Procedure |
Performance | Fast | Fast |
Named Parameter | Yes | No |
Object mapping | Yes | Yes |
Stored Procedure | Yes | Yes |
Client-Side Prepared Statements | Yes | No |
Security | More secure than MySQLi. | Secure but not more than PDO. |
在PDO或MySQLi之间应该首选哪个?
PDO和MySQLi都有各自的优势:
- 如前所述,PDO可在12种不同的数据库系统上工作,而MySQL只能与MySQL数据库一起工作。因此,如果我们想将我们的项目切换到另一个数据库,PDO使其变得容易。在MySQLi中,我们必须重写整个代码。
- PDO和MySQLi都是面向对象的,但是MySQLi还提供了过程API。两者都支持预准备语句。预备语句对于Web应用程序安全性很重要,因为它可以防止SQL注入。
需求
无需外部库即可构建此扩展。
安装运行环境Xampp(推荐)
现在,从C:/xampp/php/php.ini(已安装XAMPP的位置)中打开php.ini,并取消注释扩展名“php_pdo_mysql.dll”和“php_pdo.dll”(如果使用的是MySQL)数据库)或“php_pdo_oci.dll”(如果正在使用Oracle数据库)。现在,开始使用数据库。在PHP5.1较高版本中,已经设置了它。
使用PDO
首先,我们需要创建一个数据库,因此从此处创建名为myDB的数据库。
数据库连接
与数据库交互总是需要数据库连接。因此,我们需要知道访问数据库的标识符,即数据库的位置,数据库名称,用户名和密码。
现在,在任何文本编辑器(例如记事本或notepad++)中使用PDO创建数据库连接程序,并使用coonection.php名称保存它。使用localhost/80在XAMPP服务器上运行它。
例
1
2
3
4
5
6
7
8
9
10
11
12
|
<?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();
}
?>
|
输出量
使用以下URLlocalhost/Xampp/pdoexample/connection.php/或在保存程序的位置在服务器上运行它。
1
|
Successfully connected with myDB database
|
处理连接错误
如果存在任何连接错误,则将引发PDOException对象。如果我们想处理错误条件,我们可以捕获异常,或者也可以将其留给可以由set_exception_handler()函数设置的全局异常处理程序。
例
在此示例中,dbUser(user-id)是错误的,因此它将抛出异常,正如我们在输出中看到的那样。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?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();
}
?>
|
关闭数据库连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?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;
?>
|
输出量
本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。
还没有任何评论,赶紧来占个楼吧!