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。示例如下:

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的更多相关文章

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

    现在,如果你已经能熟练地使用MySQL客户端软件来操作数据库中的数据,就可以开始学习如何使用PHP来显示和修改数据库中的数据了.PHP提供了标准的函数来操作数据库.在PHP 5以上的版本中可以使用My ...

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

    18.9  管理表books实例 在Web项目中,几乎所有模块都要和数据表打交道,而对表的管理无非就是增.删.改.查等操作,所以熟练掌握对表进行管理的这些常见操作是十分有必的.本例为了能更好地展示PD ...

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

    18.8.3  完美分页类的代码实现 分页类的编写除了需要使用在18.8.2节中提供的可以操作的3个成员方法,还需要更多的成员,但其他的成员方法和成员属性只需要内部使用,并不需要用户在对象外部操作,所 ...

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

    18.6  PDO对预处理语句的支持 在生成网页时,许多PHP脚本通常都会执行除参数外其他部分完全相同的查询语句.针对这种重复执行一个查询,但每次迭代使用不同参数的情况,PDO提供了一种名为预处理语句 ...

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

    18.4  创建PDO对象 使用PDO在与不同数据库管理系统之间交互时,PDO对象中的成员的方法是统一各种数据库的访问接口,所以在使用PDO与数据库交互之前,首先要创建一个PDO对象.在通过构造方法创 ...

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

    18.8  设计完美分页类 数据记录列表几乎出现在Web项目的每个模块中,假设一张表中有十几万条记录,我们不可能一次全都显示出来,当然也不能仅显示几十条.为了解决这样的矛盾,通常在读取时设置以分页的形 ...

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

    18.7  PDO的事务处理 事务是确保数据库一致的机制,是一个或一系列的查询,作为一个单元的一组有序的数据库操作.如果组中的所有SQL语句都操作成功,则认为事务成功,那么事务被提交,其修改将作用于所 ...

  8. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 8-1

    18.6.5  获取数据 PDO的数据获取方法与其他数据库扩展非常类似,只要成功执行SELECT查询,都会有结果集对象生成.不管使用PDO对象中的query()方法,还是使用prepare()和exe ...

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

    18.6.4  执行准备好的查询 当准备好查询并绑定了相应的参数后,就可以通过调用PDOStatement类对象中的execute()方法,反复执行在数据库缓存区准备好的语句了.在下面的示例中,向前面 ...

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

    18.5.3  PDO的错误处理模式 PDO共提供了3种不同的错误处理模式,不仅可以满足不同风格的编程,也可以调整扩展处理错误的方式. 1.PDO::ERRMODE_SILENT 这是默认模式,在错误 ...

随机推荐

  1. [20191220]关于共享内存段相关问题.txt

    [20191220]关于共享内存段相关问题.txt --//我一直很好奇如果设置内核参数kernel.shmmax = 68719476736足够大,为什么我的测试实例还是建立3个共享内存段.--// ...

  2. C#&.Net干货分享- 构建PrinterHelper直接调用打印机相关操作

    namespace Frame.Printer{    /// <summary>    ///     /// </summary>    public class Prin ...

  3. Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt

    最近安装python,已经安装好,cmd终端中输入python.pip等命令都有用 然而在配置requirements.txt文件过程中,执行语句 “pip install -r requiremen ...

  4. js中自执行函数(function(){})()和(function(){}())区别

    方式一,调用函数,得到返回值.强制函数直接量执行再返回一个引用,引用在去调用执行方式二,调用函数,得到返回值.强制运算符使函数调用执行(function(){})(); 是 把函数当作表达式解析,然后 ...

  5. [考试反思]1110csp-s模拟测试108:消遣

    是套废题.T1题面错了,T2细节多而暴力>部分分,T3题目错了. T1:打表 题面应该是输出差值期望而不是答案值期望. 看到题目,果断打表. 答案就是所有值差之和除2的k次方. #include ...

  6. vue_04day 路由初始

    目录 vue_04 项目初始: vue 文件构造: vue项目目录结构: 项目入口(main.js): vue项目启动生命周期: 根组件(vue.js): router.js: 创建的页面: 全局样式 ...

  7. C和C++常见误区以及问题整理

    c和c++的关系 c是面向过程的语言,c++是在c的基础上扩展的面向对象的编程语言. c++具备c的所有功能,对c的库完全兼容. c++的标准在98年确定,在那之前已经有一些库大量使用. 新标准中,推 ...

  8. sublime插件开发教程4

    写几个简单的例子详解下 import sublime import sublime_plugin class ExampleCommand(sublime_plugin.TextCommand): d ...

  9. vue安装遇到的5个报错小结

    前言 这篇博文不会教你怎么安装vue,但会告知安装过程中可能遇到的5个问题 2017年我写过一篇安装vue的博客,详情:https://www.cnblogs.com/tu-0718/p/752109 ...

  10. BOM介绍以及方法

    BOM介绍和window对象的方法 一.BOM对象 (浏览器对象模型 BOM) 1.window alert() confirm() prompt() setInterval() ​ setTimeo ...