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

程序中构造:PDO主要扩展+相应PDO数据库驱动程序
PDO主要扩展:
相应PDO数据库驱动程序及数据库列表:

1.配置,安装
LINUX下:
1.自 PHP 5.1.0 起,PDO 和 PDO_SQLITE 驱动默认可用。对于自己选择的数据库,需要启用相应的 POD 驱动; 查阅 特定数据库的 PDO 驱动 文档获取更多此内容。
Windows 用户:
1.PDO 和所有主要的驱动作为共享扩展随 PHP 一起发布,要激活它们只需简单地编辑 php.ini 文件:
2.选择其他具体数据库的 DLL 文件,将前面的;去掉即可
02 |
extension=php_pdo_firebird.dll |
03 |
extension=php_pdo_informix.dll |
04 |
extension=php_pdo_mssql.dll |
05 |
extension=php_pdo_mysql.dll |
06 |
extension=php_pdo_oci.dll |
07 |
extension=php_pdo_oci8.dll |
08 |
extension=php_pdo_odbc.dll |
09 |
extension=php_pdo_pgsql.dll |
10 |
extension=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; //(关闭数据库连接) |
一个完整的例子