• PDO 数据访问抽象层


    1.操作其它数据库

    (1)造对象

    1
    $dsn = "mysql:dbname=test3;host=localhost"//数据源:两个参数:数据库驱动,链接数据库
    1
    $pdo = new PDO($dsn,"root","123");  //数据源,数据库名,密码

    (2)写sql语句

    1
    1.  $sql = "select * from productor"//查询这个表中的所有数据<br>2.  $sql = " insert into productor values('p006','随便')";   //增删改语句

    (3)执行语句:这里就和MySQLi()的不同之处了

    1
    2
    3
    4
    1. $a = $pdo->query($sql);  //执行查询语句:用query();
       //输出的是关联数组:fetch是输出一条数据, fetch_all是输出所有的数据;PDO::FETCH_ASSOC也有几个常用的:BOTH是关联和索引数组都有,ASSOC第关联数组,NUM是索引数组
       $arr = $a->fetch(PDO::FETCH_ASSOC);
       var_dump($arr);

    1
    2
    2. $a = $pdo->exec($sql);   //执行其他语句:用exec();
       var_dump($a);

     

     这样就是已经添加进数据库了     :

    2.事务功能

    事务:能够控制语句同时成功同时失败,失败时可以回滚
    (1)造对象(上面已有)

    (2)设置异常模式

    1
    $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //直接拿过来用

    (3)开始写事务:语句一起执行,其中只要有一条语句是错误的,就回滚到最开始,并且没有真正执行写入数据库中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    try
    {
        //开启事务
        $pdo ->beginTransaction();
     
        $sql1 = "insert into productor values('p007','en')"//是可以添加的
        $sql2 = "insert into productor values('p008','we')"
        $sql3 = "insert into productor values('p005','gh')"//是不能添加的,也就是错误语句
     
        $pdo->exec($sql1);
        $pdo->exec($sql2);
        $pdo->exec($sql3);<br>
        //提交
        $pdo->commit();  //正真的写入到数据库中
    }
    catch(Exception $e)
    {
        //抓住try里面出现的错误,并且处理
        echo $e->getMessage(); //获取异常信息<br>
        //回滚:回到语句最开始
        $pdo->rollBack();
    }

    3.防止sql注入攻击

    (1)?占位符:数组必须是索引数组

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    /SQL语句里面需要加占位符 ?
    $sql = "select * from nation where code=?";
    //$sql = "insert into nation values(?,?)";
     
    //准备执行,返回PDOStatement对象
    $st = $pdo->prepare($sql);
     
    //1.调用绑定参数的方法来绑定参数:绑定的参数必须定义
    //$st->bindParam(1,$code);  //前两参数必须写:占位符位置,绑定的参数
    //$st->bindParam(2,$name);
     
    //2.索引数组
    $attr = array("","");  //$code,$name
     
    //执行方法
    $st->execute($attr);

      

    (2)字符串方式:数组必须是关联数组

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //占位符是字符串
    $sql = "insert into nation values(:code,:name)";
    //准备执行
    $st = $pdo->prepare($sql);<br><br>//1.调用绑定参数参数
    //$st->bindParam(":code",$code,PDO::PARAM_STR);  //前三个参数必须要:字符串,定义的绑定,类型
    //$st->bindParam(":name",$name,PDO::PARAM_STR);
    //$code = "n007";
    //$name = "测试3";
     
    //2.关联数组
    $attr = array("code"=>"n008","name"=>"测试4");
     
    $st->execute($attr);
  • 相关阅读:
    Vue生命周期
    Vue-Router
    Vue组件
    Vue基础以及指令
    ES6 常用语法
    缓存、序列化、信号
    四、全局事务的commit和rollback
    三、全局事务begin请求GlobalBeginRequest
    二、分布式事务协调者DefaultCoordinator
    一、seata-server的main启动方法
  • 原文地址:https://www.cnblogs.com/cmzhphp2017/p/7919613.html
Copyright © 2020-2023  润新知