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 );
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值