PDO 数据访问抽象层

1.操作其它数据库

(1)造对象

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

(2)写sql语句

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

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

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

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

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

 

2.事务功能

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

(2)设置异常模式

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

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

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);
//提交 $pdo->commit(); //正真的写入到数据库中 } catch(Exception $e) { //抓住try里面出现的错误,并且处理 echo $e->getMessage(); //获取异常信息
//回滚:回到语句最开始 $pdo->rollBack(); }

 

3.防止sql注入攻击

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

/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)字符串方式:数组必须是关联数组

//占位符是字符串
$sql = "insert into nation values(:code,:name)";
//准备执行
$st = $pdo->prepare($sql);

//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);

  

posted @ 2016-12-30 15:48  悦~  阅读(199)  评论(0编辑  收藏  举报