第一次接触pdo,百度了一下,原来此方法还挺方便的,pdo在PHP6中默认使用此方式连接,mysql扩展将被作为辅助 PDO(PHP Data Object):扩展库为PHP访问数据库定义了一个轻量级的,一致性的接口。
优点:使用不同的数据库,都可以统一通过一致的函数执行查询和获取数据,并能够屏蔽不同数据库间的差异,方便移植。
图解:
pdo
程序中构造:PDO主要扩展+相应PDO数据库驱动程序

PDO主要扩展:

1php_pdo.dll

相应PDO数据库驱动程序及数据库列表:


pdo驱动

1.配置,安装

LINUX下:
1.自 PHP 5.1.0 起,PDO 和 PDO_SQLITE 驱动默认可用。对于自己选择的数据库,需要启用相应的 POD 驱动; 查阅 特定数据库的 PDO 驱动 文档获取更多此内容。
Windows 用户:
1.PDO 和所有主要的驱动作为共享扩展随 PHP 一起发布,要激活它们只需简单地编辑 php.ini 文件:

1extension=php_pdo.dll

2.选择其他具体数据库的 DLL 文件,将前面的;去掉即可

01extension=php_pdo.dll
02extension=php_pdo_firebird.dll
03extension=php_pdo_informix.dll
04extension=php_pdo_mssql.dll
05extension=php_pdo_mysql.dll
06extension=php_pdo_oci.dll
07extension=php_pdo_oci8.dll
08extension=php_pdo_odbc.dll
09extension=php_pdo_pgsql.dll
10extension=php_pdo_sqlite.dll

那些 DLL 文件应该在系统的extension_dir 中存在。
官方安装解读:http://www.php.net/manual/zh/pdo.installation.php

2、PDO连接mysql数据库

连接数据库,需要创建PDO对象,所以解释一下PDO构造方法的:


1__counstrcut(string $dsn[,string $username[,string $password[, array $driver_options]]])

参数说明:
$dsn 数据源名称,用来定义一个确定的数据库和必须用到的驱动程序。
$username 用户名
$password 用户密码
$driver_option 连接数据选项(下面)

开始引入一下连接数据选项,组成以选项名为键值的关联数组。作为第四个参数。

选项名描述
PDO::ATTR_AUTOCOMMIT确定PDO是否关闭自动提交功能,设置false为关闭
PDO::ATTR_CASE强制PDO获取的表字段字符的大小写转换,或原样使用列信息
PDO::ATTR_ERRMODE设置错误处理模式(下面详解)
PDO::ATTR_PERSISTENT确定连接是否为持久连接,默认为false
PDO::ATTR_ORACLE_NULLS将返回的空字符串转换为SQL的NULL
PDO::ATTR_PREFETCH设置应用程序提前获取的数据大小,以K字节为单位
PDO::ATTR_TIMEOUT设置超时之前等待的时间(秒数)
PDO::ATTR_SERVER_INFO包含于数据库特有的服务器信息
PDO::ATTR_SERVER_VERSION包含于数据库服务器版本号有关的信息
PDO::ATTR_CLIENT_VERSION包含于数据库客户端版本号有关的信息
PDO::ATTR_CONNECTION_STATUS包含数据库特有的与连接状态有关的信息

Cubrid数据库连接:

1$conn_str ="cubrid:dbname=demodb;host=localhost;port=33000";
2$cubrid_pdo = new PDO($conn_str, 'dba', '');

FreeTDS / Microsoft SQL Server / Sybase数据库连接:

1$hostname = "host"; //host
2$dbname = "dbname"; //db name
3$username = "user"; // username like 'sa'
4$pw = "pass"; // password for the user
5$dbh = new PDO ("mssql:host=$hostname;dbname=$dbname","$username","$pw");

Firebird/Interbase 6数据库:

1$db = new PDO ("firebird:dbname=localhost:C:\\path\\to\\database\\MyDatabase.FDB", "username", "password");

Oracle数据库:

1$db_username = "youusername";
2$db_password = "yourpassword";
3$db = "oci:dbname=yoursid";
4$conn = new PDO($db,$db_username,$db_password);

等等。。其他的详情请参考官方:http://www.php.net/manual/zh/pdo.drivers.php

连接完后成也可以使用setAttribute()函数设置上面介绍的选项表中的值
比如设置错误模式:db->setAttribute(PDO::ATTR_ERrmODE, PDO::ERrmODE_EXCEPTION);//设置抛出异常处理错误

比如设置PDO::ATTR_ORACLE_NULLS:db->setAttribute(PDO::ATTR_ORACLE_NULLS, true);//设置true后,通过$db对象打开的任何语句中的空字符串将被转换为NULL

这里引出一下PDO的错误处理模式:
3种不同的错误处理模式

错误处理模式描述
PDO::ERRMODE_SILENT此为默认模式。在错误发生时不进行任何操作, PDO 将只简单地设置错误码。开发人员可以通过PDO对象中的errofCode()和errorInfo()方法对语句和数据库对象进行检查。如果错误时由于 对语句对象的调用而产生,那么可以在那个语句对象上调用errofCode()和errorInfo()方法;如果错误时由于调用数据库对象而产生的,那 么可以在那个数据库对象上调用上述两个方法
PDO::ERRMODE_WARNING除设置错误码之外,PDO 还将发出一条传统的 E_WARNING 信息。如果只是想看看发生了什么问题且不中断应用程序的流程,那么此设置在调试/测试期间非常有用。
PDO::ERRMODE_EXCEPTION除设置错误码之外,PDO 还将抛出一个 PDOException 异常类并设置它的属性来反射错误码和错误信息。此设置在调试期间也非常有用,因为它会有效地放大脚本中产生错误的点,从而可以非常快速地指出代码中有问题 的潜在区域(记住:如果异常导致脚本终止,则事务被自动回滚)。异常模式另一个非常有用的是,相比传统 PHP 风格的警告,可以更清晰地构建自己的错误处理,而且比起静默模式和显式地检查每种数据库调用的返回值,异常模式需要的代码/嵌套更少。

附带上官方对错误模式的解释:http://www.php.net/manual/zh/pdo.error-handling.php

往下将以mysql为主介绍

PDO连接mysql数据库


1$dbh = new PDO("mysql:host=localhost;dbname=db_demo","root","password");

默认不是持久连接,若要使用数据持久连接,需要在最后加如下参数:

1$dbh = new PDO("mysql:host=localhost;dbname=db_demo","root","password","array(PDO::ATTR_PERSISTENT => true) ");
2$dbh = null; //(关闭数据库连接)

一个完整的例子