• 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():获取异常所在的行号

  • 相关阅读:
    轻配置 Vim
    PHP 使用 wkhtmltopdf/image 把HTML页面转换成 PDF/image 文件
    使用 Mailgun 实现 带附件的Email 发送功能
    LinkedIn 第三方登录(JavaScript SDK)
    react学习2
    前端面试题
    react学习
    前端面试-字符串-逆序-间隔
    前端文件上传相关知识
    js原型prototype问题
  • 原文地址:https://www.cnblogs.com/zhengleilei/p/9350737.html
Copyright © 2020-2023  润新知