zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    HDU 6143 Killer Names【dp递推】【好题】【思维题】【阅读题】
    HDU 6143 Killer Names【dp递推】【好题】【思维题】【阅读题】
    POJ 3974 Palindrome【manacher】【模板题】【模板】
    POJ 3974 Palindrome【manacher】【模板题】【模板】
    HDU 6127 Hard challenge【计算机几何】【思维题】
    HDU 6127 Hard challenge【计算机几何】【思维题】
    HDU 6129 Just do it【杨辉三角】【思维题】【好题】
    HDU 6129 Just do it【杨辉三角】【思维题】【好题】
    HDU 3037 Saving Beans【Lucas定理】【模板题】【模板】【组合数取余】
    8.Math 对象
  • 原文地址:https://www.cnblogs.com/zhangkeyu/p/6665639.html
Copyright © 2011-2022 走看看