《细说PHP》第四版 样章 第18章 数据库抽象层PDO 5

18.5  使用PDO对象

PDO扩展类库为PHP访问数据库定义了一个轻量级、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据,大大简化了数据库的操作,并屏蔽不同数据库之间的差异。

18.5.1  调整PDO的行为属性

在PDO对象中有很多属性可以用来调整PDO的行为或获取底层驱动程序状态,可以通过查看PHP帮助文档(http://www.php.net/pdo)获得详细的PDO属性列表信息。在创建PDO对象时,没有在构造方法中最后一个参数中设置的属性选项,也可以在对象创建完成后,通过PDO对象中的setAttribute()和getAttribute()方法设置并获取这些属性的值。

1.getAttribute()

该方法只需要提供一个参数,传递一个特定的属性名称,如果执行成功,则返回该属性所指定的值,否则返回NULL。示例如下:

《细说PHP》第四版 样章 第18章 数据库抽象层PDO 5

2.setAttribute()

这个方法需要两个参数,第一个参数提供PDO对象特定的属性名,第二个参数为这个指定的属性赋一个值。例如,设置PDO的错误模式,需要设置PDO对象中ATR_ERROMODE属性的值,如下所示:

$dbh->setAttribute(PDO::ATTR_ERRMODE,   PDO::ERRMODE_EXCEPTION);               //设置抛出异常处理错误

18.5.2  PDO处理PHP程序和数据库之间的数据类型转换

PDO在某种程度上对类型是不可知的,因此,它喜欢将任何数据都表示为字符串,而不将其转换为整型或双精度类型。因为字符串类型是最精确的类型,在PHP中具有广泛的应用,过早地将数据转换为整型或者双精度类型可能导致截断或舍入错误。通过将数据以字符串的形式抽出,PDO为用户提供了一些脚本控制,使用普通的PHP类型转换方式就可以控制如何进行转换及何时进行转换。

如果结果集中的某列包含一个NULL值,PDO则会将其映射为PHP的NULL值。Oracle在将数据返回PDO时会将空字符串转换为NULL,但是PHP支持的任何其他数据库都不会这样处理,从而导致了可移植性问题。PDO提供了一个驱动程序级的属性PDO::ATTR_ORACLE_NULLS,该属性会为其他数据驱动程序模拟此行为。此属性设置为TRUE,在获取时会把空字符串转换为NULL;默认情况下该属性值为FALSE。代码如下:

$dbh->setAttribute(PDO::ATTR_ORACLE_NULLS, true);

设置该属性后,通过$dbh对象打开的任何语句中的空字符串都将被转换为NULL。

《细说PHP》第四版 样章 第18章 数据库抽象层PDO 5

《细说PHP》第四版 样章 第18章 数据库抽象层PDO 5

上一篇:POJ 1664 把苹果


下一篇:《细说PHP》第四版 样章 第18章 数据库抽象层PDO 9