PDO 数据访问抽象层

    xiaoxiao2021-03-25  89

    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 );
    转载请注明原文地址: https://ju.6miu.com/read-17148.html

    最新回复(0)