PDO扩展

来源:互联网 发布:require.js 2.3.5 编辑:程序博客网 时间:2024/06/13 13:28

PDO扩展技术

目录

PDO扩展技术...1

一、PDO扩展技术...2

1、什么是PDO..2

2、为什么需要PDO..2

3、开启PDO扩展(php.ini)...2

4、使用phpinfo函数判断pdo_mysql是否开启成功...3

二、PDO类...3

1、与PDO相关的几个类...3

2、PDO类...3

3、PDO中的执行操作(增加、修改、删除)...4

4、PDO中的查询操作...6

5、PDO中的遍历操作...7

三、PDO中的预处理...9

1、为什么需要预处理...9

2、MySQL中的预处理...10

3、PDO扩展中的预处理功能...11

4、使用bindParam实现参数绑定(推荐)...12

四、PDO中的事务处理...14

1、什么是事务处理...14

2、事务处理的应用场景...14

3、MySQL中的事务处理...14

4、PDO中的事务处理功能...15

五、PDO中的异常类...16

1、什么是异常...16

2、异常发生时的执行流程...16

3、PDO中的异常捕获...16

4、PDO中的逻辑错误(手工抛出异常)...17

5、使用PDO属性实现捕获逻辑异常...18

六、PDO中属性的获取与设置...19

1、属性的获取与设置...19

2、PDO中常用的属性..

 

 


 

一、PDO扩展技术

1、什么是PDO

PHP Data Object :PHP 数据 对象

2、为什么需要PDO

3、开启PDO扩展(php.ini)

①找到php目录下的php.ini配置文件

②开启pdo_mysql.dll扩展(按需加载)

③重启Apache软件,如下图所示:

4、使用phpinfo函数判断pdo_mysql是否开启成功

在浏览器中,使用http://localhost主机打开对应的php文件,如下图所示:

二、PDO类

1、与PDO相关的几个类

PDO类 :PDO的核心,主要用于数据的连接、发送SQL语句等…

PDOStatement类 :主要用于解析结果集,实现预处理、事务处理等特殊功能…

PDOException类 :主要用于捕获PDO异常

2、PDO类

①构造函数

PDO::__construct() ( string $dsn [, string$username [, string $password ]] )

$dsn :数据源 ,字符串类型 ,格式:mysql:host=localhost;dbname=project

$username :用户名,连接数据库的用户名

$password :密码,连接数据库的密码

 

示例代码:

运行结果:

②手工关闭pdo对象

$pdo  =  null;

unset($pdo);

pdo扩展库中没有提供相应的关闭、销毁对象的功能,所以可以使用以上两种方式关闭pdo对象。

3、PDO中的执行操作(增加、修改、删除)

要用到的知识点:

•       int PDO::exec ( string $statement )

主要功能:实现对SQL语句的执行操作,返回的是受影响的行数。

参数说明:

$statement :要执行的SQL语句(要求是insert/update/delete)

 

①增加操作

示例代码:

 

要用到的知识点:

•       string PDO::lastInsertId()

主要功能:返回最后一条插入数据的id。

示例代码:

 

②修改操作

 

③删除操作

4、PDO中的查询操作

要用到的知识点:

•       PDOStatement PDO::query ( string $statement )

主要功能:实现对SQL语句的查询操作(针对select语句),返回PDOStatement对象

参数说明:

$statement :就代表要执行的select查询语句。

 

示例代码:

运行结果:

要用到的知识点:

•       int PDOStatement::rowCount ( void ) :返回数据表中的总行数

•       int PDOStatement::columnCount ( void ) :返回数据表中字段的总列数

示例代码:    

5、PDO中的遍历操作

要使用到的知识点:

•       mixed PDOStatement::fetch (int $fetch_style) :实现对数据的遍历输出,每次只能遍历一条记录,然后指针向下移动一位!

参数说明:

         PDO::FETCH_ASSOC:把一条记录遍历到关联数组中

         PDO::FETCH_NUM:把一条记录遍历到索引型数组中

         PDO::FETCH_BOTH:把一条记录遍历到混合型数组中

         PDO::FETCH_OBJ:把一条记录遍历到对象中

         PDO::FETCH_BOUND(bindColumn) :把某个变量绑定到结果集中的某个列

示例代码:PDO::FETCH_ASSOC

示例代码:PDO::FETCH_BOUND(bindColumn)

 

要用到的知识点:

•       array PDOStatement::fetchAll()

主要功能:把数据表中的记录返回到一个二维数组中

示例代码:

 

要用到的知识点:

•       string PDOStatement::fetchColumn ([ int $column_number = 0 ] )

主要功能:遍历结果集当前行的某一列信息

参数说明:

$column_number :第几列,从0开始

示例代码:

三、PDO中的预处理

1、为什么需要预处理

①PHP与MySQL执行流程

如上图所示,以上程序在使用过程中会存在一个弊端,我们如果执行的SQL语句是一致的,那么每一次都要重新发送SQL语句,这对服务器的带宽也是一种浪费。

如上图所示,以上程序主要是实现对数据表的插入操作,但是由于每次执行的SQL语句都是一致的,所以其很多资源都是重复的,但是受到PHP与MySQL操作流程的限制,必须要这样操作,那么有没有一种简单的方法,如果SQL语句形式一致,只有参数不同,我们可不可以只发送参数呢?

答:预处理功能就是在SQL语句结构与形式相同的情况下,只有参数不同所采用的一种数据处理机制,其极大的减少了带宽的浪费。

2、MySQL中的预处理

基本语法:

//1、创建预处理语句

prepare  预处理指令 from  SQL语句(insert/delete/update/select)

//2、设置参数

set @value = value;

    //3、执行预处理

    execute  预处理指令;

示例代码:

①创建预处理语句

②设置参数

③执行预处理语句

④返回执行结果

3、PDO扩展中的预处理功能

要用到的知识点:

•       PDOStatement PDO::prepare ( string $statement) :定义预处理语句

•       bool PDOStatement::execute ([ array $input_parameters ] ) :执行预处理语句

示例代码:

 

示例代码:

 

问题:在预处理功能使用时,应该使用文本标识还是使用问号呢?

答:对于这个问题,没有严格的规定,你既可以使用文本标识也可以使用问号,两者的功能都是一致的,唯一的不同就是语法的不同。

①如果使用文本标识,其在数据传递时,要求数组是一个关联型数组

②如果使用问号标识,其在数据传递时,要求数组是一个索引型数组,索引从0开始

4、使用bindParam实现参数绑定(推荐)

要使用到的知识点:

•       bool PDOStatement::bindParam ( mixed $parameter , mixed&$variable)

主要功能:实现对参数的绑定

参数说明:

$parameter :要绑定的参数

特别注意:如果以上参数,使用的是?问号标识,其绑定时索引是从1开始的!

&$variable :要设置的参数值,按引用传递

 

示例代码:

 

示例代码:

四、PDO中的事务处理

1、什么是事务处理

事务处理主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

 

在事务处理中,所有步骤(操作)要么都成功,要么都失败。

如果所有步骤都成功,则认为事务处理成功

如果有一个步骤出现了问题,则认为事务处理失败

2、事务处理的应用场景

小强:有钱,银行卡:2000元

旺财:缺钱,银行卡:0.1元

 

旺财管小强借钱,执行步骤:

①小强到银行柜台办理转账业务,填写账号(旺财),柜台工作人员根据账号进行转账操作。

小强银行卡扣款1000元,还剩1000元。

转账中间出现了问题:数据库服务器突然断电啦

②旺财到ATM机前面输入账号,查询到账情况。

旺财银行卡增加1000元,还剩1000.1元。

 

所谓的事务处理就是要么交易同时成功,则提交;如果交易有一方失败,则回滚。

3、MySQL中的事务处理

特别注意:如果想实现事务处理功能,必须有一个前提:你使用的数据表必须是InnoDB引擎,否则无法实现事务处理功能。

 

①开启事务

1)标准事务:start  transaction;

当提交或回滚一个事务之后,事务结束。接下来的操作不在事务操作范围之内。

2)语句事务:set  autocommit = 0;

当提交或回滚一个事务之后,事务不会终止,后面的操作仍处于事务之中。

②提交事务:commit;

③回滚事务:rollback;

 

示例代码:

如上图所示:当开启事务后,其对数据表的所有操作并没有实时的写入到硬盘中。

如果确认删除(交易成功),则可以通过commit提交事务:

如果后悔删除(交易失败),则可以通过rollback回滚事务:

4、PDO中的事务处理功能

要使用到的知识点:

①开启事务

•       bool PDO::beginTransaction ( void )

②提交事务

•       bool PDO::commit ( void )

③回滚事务

•       bool PDO::rollBack ( void )

示例代码:

 

五、PDO中的异常类

1、什么是异常

PHP 5 提供了一种新的面向对象的错误处理方法。

异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常。

2、异常发生时的执行流程

①当前代码状态被保存

②代码执行被切换到预定义的异常处理器函数

③根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本。

3、PDO中的异常捕获

基本语法:

try {

    存在潜在错误的代码;

    if(逻辑错误) {

       //手工输出异常

       throw  new PDOException(‘错误的文本信息’,’错误号’);

}

} catch(PDOException $e) {

    echo ‘错误号:’.$e->getCode();

    echo ‘错误行号:’.$e->getLine();

    echo ‘错误的文本信息:’.$e->getMessage();

}

示例代码:

4、PDO中的逻辑错误(手工抛出异常)

运行结果:

5、使用PDO属性实现捕获逻辑异常

要使用到的知识点:

bool PDO::setAttribute ( int $attribute ,mixed $value )

主要功能:设置属性

参数说明:

$attribute :要设置的属性

$value :要设置的属性值

 

PDO::ATTR_ERRMODE :PDO异常级别

①PDO::ERRMODE_SILENT :常规错误,默认

②PDO::ERRMODE_WARNING :警告错误

③PDO::ERRMODE_EXCEPTION :异常错误

 

示例代码:

运行结果:

六、PDO中属性的获取与设置

1、属性的获取与设置

要用到的知识点:

设置:set  获取 :get  属性 :attribute

bool PDO::setAttribute ( int $attribute ,mixed $value ) :设置属性

mixed PDO::getAttribute ( int $attribute ) :获取属性

参数说明:

$attribute :要设置或获取的属性

$value :要设置的属性值

2、PDO中常用的属性

①PDO::ATTR_AUTOCOMMIT :自动提交,常用于事务处理(语句事务)

   参数值:

   1 :自动提交

   0 :关闭自动提交

 

②PDO::ATTR_CASE :结果集大小写

   参数值:

PDO::CASE_LOWER(2):把结果集(字段名称)全部转化为小写

PDO::CASE_UPPER(1):把结果集(字段名称)全部转化为大写

PDO::CASE_NATURAL(0):正常返回

 

③PDO::ATTR_PERSISTENT :长连接

名词解析:

短连接:连接 à 发送SQL语句à 执行SQL语句  à  关闭

长连接:连接 à a发送SQL语句à 执行SQL语句  à  a发送SQL语句 à 执行SQL语句 …

 

示例代码:获取常用属性值

示例代码:设置常用属性值

七、课程总结

1、课程总结

①PDO扩展技术

PDO的基本概念以及为什么需要PDO

②PDO类(增删改查)

增删改:$pdo->exec($sql) 返回受影响的行数

查询:$pdo->query($sql) 返回PDOStatement类,fetch方法、fetchAll方法、fetchColumn方法

③PDO中的预处理

减少SQL语句的传递,只传递相关的参数,这样可以减少带宽的浪费

prepare stmt1  from  ‘insert into tb_admin values (null,?,?,?)’;

设置参数

set @参数 = 参数的值;

执行预处理

execute stmt1  using  @参数;

④PDO中的事务处理

开启事务beginTransaction()

提交事务commit()

回滚事务rollback()

⑤异常类PDOException

try {

         //存在潜在错误的语句

         if(逻辑错误) {

                   //手工抛出异常

                   throw  new PDOException(‘错误信息’,’错误号’);

}

} catch(PDOException $e) {

         echo$e->getCode();

         echo$e->getLine();

         echo$e->getMessage();

}

⑥属性的设置与获取

setAttribute

getAttribute

原创粉丝点击