mysql 为什么使用pdo_为什么 PHP 应该使用 PDO 方式访问数据库

很多程序员都学习过如何使用 MySQL 或 MySQLi 扩展访问数据库。在 PHP 5.1 中,有一个更好的方法。PHP Data Objects (PDO) 提供了很多预处理语句的方法,且使用对象将使你的工作更有成效!

PDO 介绍

“PDO – PHP Data Objects – 是一个对多种数据库提供统一操作方法的数据库访问层。”

它并不具备数据库特有的语法,但它将使切换数据库和平台更加容易,多数情况下,只需要简单修改链接字符串。

20130618115152717.png

这并非一篇完整教导如何使用SQL的教程。它重要为那些现今仍在使用 mysql 或 mysqli 扩展的人,帮助他们跃至更具可移植性和强力的 PDO。

数据库支持

此扩展可以使用 PDO 驱动编写过的所有数据库。在本文书写时,下面的数据库支持已经实现:

PDO_DBLIB ( FreeTDS / Microsoft SQL Server / Sybase )

PDO_FIREBIRD ( Firebird/Interbase 6 )

PDO_IBM ( IBM DB2 )

PDO_INFORMIX ( IBM Informix Dynamic Server )

PDO_MYSQL ( MySQL 3.x/4.x/5.x )

PDO_OCI ( Oracle Call Interface )

PDO_ODBC ( ODBC v3 (IBM DB2, unixODBC and win32 ODBC) )

PDO_PGSQL ( PostgreSQL )

PDO_SQLITE ( SQLite 3 and SQLite 2 )

PDO_4D ( 4D )

你的系统不会也不必支持所有上面的驱动;下面是一个快速检查所支持数据库的方法:

1

print_r(PDO::getAvailableDrivers());

连接

不同数据库的连接方法可能稍有不同,下面是一些较为流行的数据库连接方法。你将注意到,虽然数据库类型不同,前三种数据库的连接方式是相同的——而 SQLite 使用自己的语法。

20130618115152546.png

01

try {

02

# MS SQL Server andSybase with PDO_DBLIB

03

$DBH = newPDO("mssql:host=$host;dbname=$dbname, $user, $pass");

04

$DBH = newPDO("sybase:host=$host;dbname=$dbname, $user, $pass");

05

06

# MySQL with PDO_MYSQL

07

$DBH = newPDO("mysql:host=$host;dbname=$dbname", $user, $pass);

08

09

# SQLite Database

10

$DBH = newPDO("sqlite:my/database/path/database.db");

11

}

12

catch(PDOException $e) {

13

echo$e->getMessage();

14

}

注意 try/catch 块——你应该总是使用 try/catch 包装你的 PDO 操作,并使用异常机制——这里只是简单的示例。通常,你只需要一个连接——有很多可以教你语法的列表。 $DBH 代表“数据库句柄”,这将贯穿全文。

通过将句柄设置为 NULL,你可以关闭任一连接。

1

# close the connection

2

$DBH = null;

你可以在PHP.net找到更多数据库特定选项和/或其它数据库连接字符串的信息。

异常与 PDO

PDO 可以使用异常处理错误,这意味着你的所有 PDO 操作都应当包装在一个 try/catch 块中。你可以通过设定错误模式属性强制 PDO 在新建的句柄中使用三种错误模式中的某一个。下面是语法:

1

$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );

2

$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );

3

$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

无论你设定哪个错误模式,一个错误的连接总会产生一个异常,因此创建连接应该总是包装在 try/catch 块中。

PDO::ERRMODE_SILENT

这是默认的错误模式。如果你使用这个模式,你将得使用同 mysql 或 mysqli 扩展一样的方法差错。其它两种模式更适合 DRY 编程。

PDO::ERRMODE_WARNING

此方法将会发出一个标准PHP警告,并允许程序继续运行。这对调试很有帮助。

PDO::ERRMODE_EXCEPTION

这是多数情况下你所希望的方式。它生成异常,允许你更容易的处理错误,隐藏可能导致它人了解你系统的信息。下面是一个充分利用异常的示例:

01

# connect to the database

02

try {

03

$DBH = newPDO("mysql:host=$host;dbname=$dbname", $user, $pass);

04

$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

05

06

# UH-OH! Typed DELECT instead of SELECT!

07

$DBH->prepare('DELECT name FROM people');

08

}

09

catch(PDOException $e) {

10

echo"I'm sorry, Dave. I'm afraid I can't do that.";

11

file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);

12

}

在 select 语句中有一个故意留下的错误;这将导致一个异常。异常错误细节保存至一个 log 文件,并生成一段友好的(或不怎么友好的)信息於用户。文章来源写论文 http://www.400qikan.com/news/1448.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值