A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 西安前端组 于 2017-12-21 11:47 编辑

一、PDO扩展技术1、什么是PDO
         全称php dataobject:PHP数据对象
         PDO是PHP数据对象(PHP Data Object)的缩写。
         PDO扩展为PHP访问数据库,提供了一个数据访问抽象层,使用统一的数据操作方式,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。
            PDO为一个PHP访问数据库的轻量型接口,访问数据库需要使用具体的数据库驱动。如PDOMySQL驱动来完成。
2、为什么需要PDO
         ①支持多种数据库操作,
         ②支持面向对象,事务,防止sql注入等操作  
3、开启PDO扩展
  php.inià开启pdo_mysql.dll扩展à重启à检测
二、PDO类
1、与PDO相关的几个类
         PDO类:PDO的核心,用于数据库连接、发送sql语句等
         PDOstatement类:用于解析结果集,实现预处理,事务处理等特殊功能
         PDOException异常类:用于捕获PDO异常
2、PDO类
         开辟内存空间à执行构造函数
         ①构造函数
                   PDO::__construct($dsn,$user,$pass)
                   $dns格式mysq:host=locallhost,dbname=project
         实例:
[PHP] 纯文本查看 复制代码
header("content-type:text/html;charset=utf-8");
$pdo= new PDO('mysql:host=localhost;dbname=test01',’root’,’mysql’);

         ②手工关闭pdo对象,PDO中没有mysql_close();
                   $pdo=null;
                   或者         unset($pdo),
3、pdo执行操作(增加,修改,删除)
         intPDO::exec(string $statement)
                   主要功能:实现对sql语句的执行操作,
①增加操作     
  1、设置响应头信息
         2、连接PDO数据库
         3、组装sql语句
      
[PHP] 纯文本查看 复制代码
$sql = ‘insertinto tale_name values(‘’,’’’,’)’;

         4、执行sql语句
[PHP] 纯文本查看 复制代码
       $num = $pdo->exec($sql);
       echo ‘共插入’.$num.’条语句’,

         可以实现插入最后一条数据的ID
                   stringPDO::lastInsterId()
       echo$pdo->lastInsterId();

②修改操作
     前面步骤一致:
     第三步组装sql
[PHP] 纯文本查看 复制代码
$sql =’update table_name set name = ‘张三’;

执行sql语句
  
[PHP] 纯文本查看 复制代码
  $num =$pdo->exec($sql);
//共修改了$num

③删除操作
   
[PHP] 纯文本查看 复制代码
 $num =$pdo->exec($sql);
//共删除了$num

4、PDO的查询操作
         PDO::query(string$statement)
         主要功能:实现对SQL语句的查询操作,返回PDOStatement对象
         参数说明:
                   $statement:代表要执行的查询语句
//执行代码
$stmt = $pdo->query($sql);

[PHP] 纯文本查看 复制代码
         intPDOstatement::rowCount(void)         返回总行数
         intPDOStatement::columnCount(void); 返回总列数
5、PDO中的遍历操作  第一种遍历方法
[PHP] 纯文本查看 复制代码
mixed       PDOStatement::fetch(int$fetch_style)  数据遍历输出,遍历一条,指针向下移动一位
                            PDO::FETCH_ASSOC         把一条记录遍历到关联数组中
                            PDO::FETCH_NUM  把一条记录遍历到索引型数组中
                            PDO::FETCH_BOTH 把一条记录遍历到混合型数组中
                            PDO::FETCH_OBJ把一条记录遍历到对象中
                            PDO::FETCH_BOUND(bindcolumn) 数据绑定,把某个变量绑定到结果集中的某个列
[PHP] 纯文本查看 复制代码
示例一:PDO::FETCH_ASSOC
//5、获取总记录数
$count=$stmt->rowCount();
//遍历到关联数组中
for($i=0;$i<$count;$i++){
    $row=$stmt->fetch(PDO::FETCH_ASSOC);
}

示例二:PDO::FETCH_BOUND(bindColumn)
[PHP] 纯文本查看 复制代码
//5、使用bindColumn实现列绑定
$stmt=$stmt->bindColumn(1,$id); //把变量$id 绑定到结果集的第1列
$stmt=$stmt->bindColumn(2,$user); //把变量$user 绑定到结果集的第2列
$stmt=$stmt->bindColumn(3,$pass); //把变量$pass绑定到结果集的第3列
//6、遍历结果集
for($i=1;$i<$count;$i++){
    //指定fetch绑定方式为PDO::FETCH_BOUND;否则bindCoulmn不会生效
    $stmt->fetch(PDO::FETCH_BOUND);
//输出$id/$user/$pass的值
echo $id;
    echo$user;
    echo$pass;
}

第二种遍历方法
         array         PDOStatement::fetchAll();
         主要功能:把数据表的记录返回到一个二维数组中
示例代码:
   
[PHP] 纯文本查看 复制代码
 $data=stmt->fetchAll(PDO::FETCH_ASSOC);
    //遍历$data

第三种遍历方法
[PHP] 纯文本查看 复制代码
         string        PDOStatement::fetchColumn([int$column_number = 0]);
主要功能:遍历结果集当前行的某一列信息
         参数说明:
         $column_number: 第几列,默认从0开始
    //5、获取总记录数
    $count=$stmt->rowCount();
    for($i=0;$i<$count;$i++){
       echo$stmt->fetchColumn(0);
}

三、PDO的预处理

1、为什么需要预处理
         sql语句一致的话,服务器带宽浪费
         预处理语句在sql语句与形式相同的情况下,只有参数不同所采用的一种数据处理机制,极大减少带宽的浪费
         可以防止sql注入
2、mysql中的预处理
[PHP] 纯文本查看 复制代码
    //1、创建预处理语句
    prepare 预处理指令 from sql语句(insert/delete/update/select)
    //2、设置参数
    set @value= value;
    //3、执行预处理
    execute 预处理指令 using @value(多个用,隔开);

3、PDO扩展中的预处理功能
要学到的知识点:
         PDOStatementPDO::prepare(string $statement):定义预处理语句
         boolPDOStatement::execute([array $input_parameters]):执行预处理语句
示例代码:
[PHP] 纯文本查看 复制代码
$sql = ‘insert into table values(null,:name,:pass,:time)’;
//4、定义预处理语句
$stmt=$pdo->prepare($sql);
//5、使用execute实现参数传递
$data=array(
‘:name’=>’’,
     ‘:pass’=>’’,
     ‘:time’=>’’,
);
$stmt->excute($data);

如果使用问号:
    $data=array(
       1=>’’,
       2=>’’
);

问题:在预处理功能使用时,应该使用文本标识还是使用问号呢?
答:没有严格规定,都可以使用,唯一不同是语法不同
①如果使用文本标识,那么数据传递时,要求数组是关联数组,
②如果使用问号标识,那么数据传递时,要求数组是一个索引数组,索引从0开始

4、使用bindParam实现参数绑定(推荐)
bool bindParam(mixed $parameter,mixed&$variable)
①绑定变量的名到占位符,变量被执行时候更改会改变
②如果使用问号标识,那么在绑定的时候索引是从1开始的
bindValue()       绑定变量的值到占位符
bindColumn()   绑定一列到一个 PHP 变量
主要实现对参数的绑定
参数说明:
         $parameter要绑定的参数
         $variable    要设置的参数值,按引用传递
四、PDO中的事务处理1、什么是事务处理
         处理操作量大,复杂度高的数据,比如,银行转账,购物车下单
2、事务处理的应用场景
         两人借钱,银行转账,细节步骤说明
         所谓的事务处理就是要么交易成功,则提交,要么交易失败,则回滚!
3、mysql中的事务处理
IM:mysql必须引擎为InnoDB
①开启事务
         1)标准事务:start transaction;
                   当提交或回滚一个事务之后,事务结束,接下来的操作不在事务之中
         2)语句事务:setautocommit=0;
                   当提交或回滚一个事务之后,事务不会终止,后面的操作仍处于事务之中
示例代码:(理解事务的过程)
②提交事务
         commit;
③回滚事务
         rollback;
4、PDO中的事务处理功能
[PHP] 纯文本查看 复制代码
①开启事务     boolPDO::beginTtransaction(void)
$pdo->beginTransaction();

②提交事务     bool PDO::commit(void)
$pdo->commit();

③回滚事务     bool pdo::roolback(void)
$pdo->roolback();

五、PDO中的异常类1、什么是异常
         在指定的错误(异常)情况发生时候改变脚本的正常流程,这种情况称为异常。
2、异常发生时的执行流程
         ①当前代码被保存
         ②代码被切换到预定义的异常处理函数
         ③或者重新开始执行,或者终止脚本执行,或从代码另外的位置继续执行脚本
3、PDO中的异常捕获
try{
     //手工抛出异常
throw new PDOExeception(‘错误的文本信息’,’错误号’);
}catch(PDOExeception $e){
}

错误号 getCode()
错误行号:     getLine();
错误文本信息         getMessage();
示例代码:略
4、PDO中的逻辑错误
         手工抛出异常
  throw new PDOException(‘错误的文本信息’,’错误号’);

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);设置属性
bool PDO::getAttribute(int $attribute);  获取属性
2、PDO中常用的属性
[PHP] 纯文本查看 复制代码
PDO::ATTR_ERRMODE    已经说明
①PDO::ATTR_AUTOCOMMIT  语句事务,值0,1
         自动提交,常用于事务处理,
$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);

②PDO::ATTR_CASE
         结果集大小写,
参数值(PDO::CASE_LOWER,PDO::CASE_UPPER,PDO::NATURAL   正常返回)
$pdo->getAttribute(PDO::CASE_UPPER);

③PDO::ATTR_PERSISTENT      长连接
         短连接:连接à发送sql语句à执行sql语句à关闭
         长连接:连接àa发送sql语句à执行sql语句àb发送sql语句à执行sql语句…





1 个回复

正序浏览
太赞了太赞了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马