PDO

PDO

PDO是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力

=======PDO操作Mysql数据库=============

链接数据库:$pdo = new PDO('mysql:host=localhost;dbname=ceshi', $user, $pass)

设置字符集:$pdo->exec("set names utf8")

写sql语句,并执行,mysql服务器返回结果集(预处理对象):

  $sql = "select * from student"
  $ycl = $pdo->query($sql)

预处理对象调用数据(fetchAll(查询格式)查所有数据):$attr = $ycl->fetchAll(PDO::FETCH_ASSOC)

=============PDO类========

exec():用来执行增删改和设置的语句(例如设置字符集)

query():用来执行查询语句,并返回与处理结果集(再调用预处理类的方法进行下面的操作)

lastInsertId():最后一次插入的id

$sql = "insert into user values('','zhangsan1111','','')";
   if($pdo->exec($sql)){
       $lastid = $pdo->lastInsertId();
        echo "id是{$lastid}的数据插入成功";
   }

setAttribute():设置PDO的一些属性

$user = "root";
    $pass = "";
   $pdo = new PDO('mysql:host=localhost;dbname=ceshi', $user, $pass);
   $pdo->exec("set names utf8");
   $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);//设置查询数据返回的类型,这样就不用每次都写fetchAll(PDO::FETCH_ASSOC)了
   $sql = "select * from student";
   $ycl = $pdo->query($sql);
   //$attr = $ycl->fetchAll(PDO::FETCH_ASSOC);
   $attr = $ycl->fetchAll();
   var_dump($attr);

==================预处理=======================

prepare():预处理sql语句

 $user = "root";
    $pass = "";
    $pdo = new PDO('mysql:host=localhost;dbname=ceshi', $user, $pass);
    $pdo->exec("set names utf8");
    
    $sql = "select * from student";
    $ycl = $pdo->prepare($sql);//预处理,把sql语句保存准备,可防止sql注入,也能提高查询的效率,当另一个用户再次请求相同的sql,会先找到这个准备的sql,执行查询
    $ycl->execute();
    
    $attr = $ycl->fetchAll(PDO::FETCH_ASSOC);

bindValue():把一个值绑定到一个参数

$sql = "select * from student where sno =?";//我们要准备sql语句,为了防止每个人选择的sno不一样而导致重复的sql,我们设置sno=?
    $ycl = $pdo->prepare($sql);//预处理,准备sql
    $id = 098;//这个id是传递过来的参数
    $ycl->bindValue(1,$id,PDO::PARAM_INT);//这句话的意思是:往第一个问号上绑定$id,并给$id设置类型PDO::PARAM_INT
    $ycl->execute();//执行
    
    $attr = $ycl->rowCount();
    var_dump($attr);

columnCount():返回表的列数

 $sql = "select * from student";
    $ycl = $pdo->prepare($sql);//预处理,准备sql
    $ycl->execute();//执行
    
    $attr = $ycl->columnCount();
    var_dump($attr);

fetch():从预处理返回第一条数据

$sql = "select * from student";
    $ycl = $pdo->prepare($sql);//预处理,准备sql
    $ycl->execute();//执行
    
    $attr = $ycl->fetch(PDO::FETCH_ASSOC);
    var_dump($attr);

fetchAll():返回混合数组

fetchColumn(n):从预处理里面查询某一行数据的第n列的值,执行第一次是第一行,执行第二次是第二行,不写n默认为0

rowCount():影响数据的行数

$sql = "select * from student";
    $ycl = $pdo->prepare($sql);//预处理,准备sql
    $ycl->execute();//执行
    
    $attr = $ycl->rowCount();
    var_dump($attr);

execute():预处理执行

        预处理实例:

$user = "root";
    $pass = "";
    $pdo = new PDO('mysql:host=localhost;dbname=ceshi', $user, $pass);
    $pdo->exec("set names utf8");
    
    //查询的预处理
    $sql = "select * from student";
    $ycl = $pdo->prepare($sql);//预处理,准备sql
    $ycl->execute();//执行
    
    $attr = $ycl->fetchAll(PDO::FETCH_ASSOC);
    //var_dump($attr);
    
    //增删改的预处理
    $sql = "update student set name='' where sno = ''";
    $ycl = $pdo->prepare($sql);//预处理,准备sql
    if($ycl->execute()){
        $num = $ycl->rowCount();//得到影响行数
        echo $num."行被删除了";
    };//执行
    

=====================PDO实现事务机制======================

一、事件中所有任务都成功

    开启事件

   一件事件由多个任务组成,如果所有任务都成功,接着提交该事件

 结束事件

二、事件中有一个任务失败

    开启事件

    一件事件由多个任务组成,其中一个任务失败则改时间完成,接着回滚改事件

    结束事件

三、在事务中用到的PDO类的方法

begin Transaction(): 启动一个事务

commit():提交到数据库

rollback(): 回滚

四、在事务中用到的PDOException异常处理类的方法

getMessage():获取异常消息内容

getCode():获取异常代码

getLine():获取异常所在的行号

 

posted @ 2018-07-22 17:07  所爱隔山隔海  阅读(331)  评论(0编辑  收藏  举报