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

18.4  创建PDO对象

使用PDO在与不同数据库管理系统之间交互时,PDO对象中的成员的方法是统一各种数据库的访问接口,所以在使用PDO与数据库交互之前,首先要创建一个PDO对象。在通过构造方法创建对象的同时,需要建立一个与数据库服务器的连接,并选择一个数据库。PDO的构造方法原型如下:

__construct ( string dsn [, string username [, string password [,   array driver_options]]] )        //PDO的构造方法

在构造方法中,第一个必选的参数是数据源名(DSN),用来定义一个确定的数据库和必须用到的驱动程序。DSN的PDO命名惯例为PDO驱动程序的名称,后面跟一个冒号,再后面是可选的驱动程序的数据库连接变量信息,如主机名、端口和数据库名。例如,连接Oracle服务器和连接MySQL服务器的DSN格式分别如下:

oci:dbname=//localhost:1521/mydb      //连接Oracle服务器的DSN,oci:作为驱动前缀,主机localhost,端口1521,数据库mydb

MySQL:host=localhost;dbname=testdb       //连接MySQL服务器的DSN,MySQL:作为驱动前缀,主机localhost,数据库testdb

构造方法中的第二个参数username和第三个参数password分别指定用于连接数据库的用户名和密码,是可选参数。最后一个参数driver_options需要一个数组,用来指定连接所需的所有额外选项,传递附加的调优参数到PDO或底层驱动程序。

18.4.1  以多种方式调用构造方法

可以多种方式调用构造方法创建PDO对象。下面以连接MySQL和Oracle服务器为例,分别介绍构造方法的多种调用方式。

1.将参数嵌入构造函数

在下面的连接Oracle服务器的示例中,在DSN字符串中加载OCI驱动程序并指定了两个可选参数:第一个是数据库名称;第二个是字符集。使用特定的字符集连接一个特定的数据库;如果不指定任何信息,会使用默认的数据库。代码如下所示:

OCI:dbname=accounts告诉PDO它应该使用OCI驱动程序,并且应该使用accounts数据库。对于MySQL驱动程序,第一个冒号后面的所有内容都将被用作MySQL的DSN。连接MySQL服务器代码如下所示:

其他驱动程序会同样以不同的方式解释它的DSN。如果无法加载驱动程序,或者连接失败,则会抛出一个PDOException,以便开发人员决定如何最好地处理该故障。省略try…catch控制结构并无裨益,如果在应用程序的较高级别没有定义异常处理的方式,则在无法建立数据库连接的情况下,终止该脚本。

2.将参数存放在文件中

在创建PDO对象时,可以把DSN字符串放在另一个本地或远程文件中,并在构造函数中引用这个文件。代码如下所示:

只要将文件/usr/local/dbconnect中的DSN驱动改变,就可以在多个数据库系统之间切换,但要确保该文件由负责执行PHP脚本的用户所拥有,而且此用户拥有必要的权限。

3.引用php.ini文件

只要在php.ini文件中把DSN信息赋给一个名为pdo.dsn.aliasname的配置参数,就可以在PHP服务器的配置文件中维护DSN信息,这里aliasname是后面将提供给构造函数的DSN别名。如下所示,连接Oracle服务器,在php.ini中为DSN指定的别名为oraclepdo:

[PDO]

pdo.dsn.oraclepdo="OCI:dbname=//localhost:1521/mydb;charset=UTF-8";

重新启动Oracle服务器,就可以在PHP程序中调用PDO构造方法时,在第一个参数中使用这个别名,代码如下所示:

4.PDO与连接有关的选项

在创建PDO对象时,有一些与数据库连接有关的选项,可以将必要的几个选项组成数组传递给构造方法的第四个参数driver_opts,用来传递附加的调优参数到PDO或底层驱动程序。PDO的一些与数据库连接有关的选项如表18-2所示。

表18-2  PDO的一些与数据库连接有关的选项

设置选项名为下标组成的关联数组,作为驱动程序特定的连接选项,传递给PDO构造方法的第四个参数。在下面的示例中使用连接选项创建持久连接,持久连接的好处是能够避免在每个页面执行时都打开和关闭数据库服务器连接,速度更快。如MySQL数据库的一个进程创建了两个连接,PHP则会把原有连接与新的连接合并为一个连接。代码如下所示:

18.4.2  PDO对象中的成员方法

当PDO对象创建成功后,与数据库的连接已经建立,就可以使用该对象了。PHP与数据库服务器之间的交互都是通过PDO对象中的成员方法实现的,PDO对象中的成员方法如表18-3所示。

表18-3  PDO对象中的成员方法(共13个)

从表18-3中PDO对象中的成员方法可以看出,使用PDO对象可以完成与数据库服务器之间的连接管理、存取属性、错误处理、查询执行、预处理语句,以及事务等操作。

原文地址:https://www.cnblogs.com/itxdl/p/11386750.html

时间: 2024-08-02 01:10:52

《细说PHP》第四版 样章 第18章 数据库抽象层PDO 4的相关文章

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

现在,如果你已经能熟练地使用MySQL客户端软件来操作数据库中的数据,就可以开始学习如何使用PHP来显示和修改数据库中的数据了.PHP提供了标准的函数来操作数据库.在PHP 5以上的版本中可以使用MySQL和MySQLi两套扩展函数,MySQLi是PHP 5中新增的,是对MySQL扩展的改进.但由于历史遗留问题,很多老项目是在PHP 4时使用MySQL扩展开发的,如果在原有的项目上进行二次开发,或者找一些学习的例子,都要求开发人员会使用MySQL扩展函数.如果是新设计的项目,则推荐使用MySQL

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

18.6  PDO对预处理语句的支持 在生成网页时,许多PHP脚本通常都会执行除参数外其他部分完全相同的查询语句.针对这种重复执行一个查询,但每次迭代使用不同参数的情况,PDO提供了一种名为预处理语句(Prepared Statement)的机制,如图18-6所示.它可以将整个SQL命令向数据库服务器发送一次,以后如果参数发生变化,数据库服务器只需对命令的结构做一次分析就够了,即编译一次,可以多次执行.它会在服务器上缓存查询的语句和执行过程,只在服务器和客户端之间传输有变化的列值,以此消除额外的

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

18.9  管理表books实例 在Web项目中,几乎所有模块都要和数据表打交道,而对表的管理无非就是增.删.改.查等操作,所以熟练掌握对表进行管理的这些常见操作是十分有必的.本例为了能更好地展示PDO的应用,并没有将数据表的操作封装成一个数据库操作类,而是采用了过程化的编写方式,用最直接的方式实现. 18.9.1  需求分析 本例主要的目标是实现对图书信息表books的管理过程,包括添加图书.修改图书.删除图书.遍历图书列表.搜索图书等操作.创建数据表books的SQL语句如下所示. 创建后,

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

18.2  PDO所支持的数据库 使用PHP可以处理各种数据库系统,包括MySQL.PostgreSQL.Oracle.MsSQL等.但访问不同的数据库系统时,其所使用的PHP扩展函数也是不同的.例如,使用PHP的MySQL或MySQLi扩展函数,只能访问MySQL数据库:如果需要处理Oracle数据库,就必须安装和重新学习PHP中处理Oracle的扩展函数库,每种数据库都有对应的扩展函数,如图18-3所示.应用每种数据库时都需要学习特定的函数库,这样是比较麻烦的,更重要的是这使得数据库间的移植

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

18.6.4  执行准备好的查询 当准备好查询并绑定了相应的参数后,就可以通过调用PDOStatement类对象中的execute()方法,反复执行在数据库缓存区准备好的语句了.在下面的示例中,向前面提供的contactInfo表中使用预处理方式连续执行同一条INSERT语句,通过改变不同的参数添加两条记录,代码如下所示: 如果你只是要传递输入参数,并且有许多这样的参数要传递,那么,下面示例提供的快捷方式语法会非常有帮助.该示例通过在execute()方法中提供一个可选参数,该参数是由准备查询中

Java编程思想第四版读书笔记——第十三章 字符串

Java编程思想第四版读书笔记--第十三章 字符串 字符串的操作是计算机程序设计中最常见的行为. 关键词: StringBuilder ,StringBuffer,toString(),format转换,正则表达式, 1.不可变String String对象时不可变的.每当把String对象作为方法的参数时,都会复制一份引用.(其实就是对函数中参数列表中参数的操作不会影响外面的原参数) 如下: import static net.mindview.util.Print.*; public cla

《细说PHP》 第四版 样章 第二章 PHP的应用与发展 5

2.5  如何学习PHP PHP以其简单易学的特点,以及敏捷开发的优势,从一个几乎不被人知的开源项目,慢慢成长为技术人员首选的动态Web设计工具,与其他语言相比,PHP表现得更好.更快.更简单易学.尽管如此,我们在面对一项自己不熟悉的新技术时,仍然会感到无所适从,不知道从何处入手,似乎总是感觉摸不出一条清晰的脉络来.另外,最大的障碍莫过于学习的过程枯燥乏味,从而失去学习兴趣.不过,如果你能掌握一种适合你的学习方法,就可以事半功倍.根据笔者多年的PHP教学经验,和众多人才培养的成功案例,列出的学习

《细说PHP》第四版 样章 第23章 自定义PHP接口规范 1

如今的项目开发中,接口是很普遍的应用技术.现在好多项目组都单独设有接口开发人员.像腾讯.微博.淘宝等开放平台,其所谓的开放,就是提供一些可调用的接口,用于获取相关的信息.例如,微信用户基本信息.淘宝店铺.商品消息等,再根据这些信息,在应用里完成交互.虽然本章不会涉及太多PHP语言本身的新技术点,但可以看作程序架构设计.业务逻辑和设计模式的应用.我们在定义接口时,通常有两种规范,一种是被其他内部项目调用的接口,另一种是对外的接口,主要提供给外部开发者调用.两种接口最大区别是,内部接口不需要太严格的

《细说PHP》第四版 样章 第23章 自定义PHP接口规范 3

23.2  接口实现的基础 大家都很了解函数在本地应用,通过名称调用函数执行,并通过传递不同参数,函数有不同执行,执行后给调用者返回结果.如果把一个函数做成一个接口远程访问,也需要这几个步骤.使用HTTP的GET或POST等,通过URL并附带参数请求接口,接口执行后将返回值传回远端的调用者.请求者可以是浏览器,可以是PHP或其他语言程序,也可以是页面中的Ajax等.当然,接口返回值的格式也是统一的,要让各种语言和设备的请求者可以操作,通常使用XML或JSON格式作为返回数据. 23.2.1  实