一、PDO的定义
1.pdo(php data object)是一个数据库的抽象层
二、PDO的特点
1.跨数据库
2.支持预处理
3.支持事务处理
三、PDO的使用
1.基本使用
(1)实例化pdo
①数据库类型必须小写
②格式:$pdo=new PDO('mysql(可替换):host=localhost;dbname=数据库名;charset=utf8','root','密码');
(2)发送sql指令
$pdo->query(sql查询语句) 返回的是对象
$pdo->exec(sql增、删、改语句) 返回的是手影响行数
(3)$pdo->errorInfo() 错误信息
$pdo->lastInsertId()
2.处理返回对象的方法
(1)fetch()返回结果集的下一行,结果指针下移到头返回false
(2)fetchAll(PDO::FETCH_NUM)返回全部(索引式) PDO::FETCH_ASSOC关联式 PDO::FETCH_BOTH索引式和关联式
(3)foreach遍历
3.预处理
(1)实例化对象
(2)发送预处理指令
$stmt=$pdo->prepare(sql语句,变量部分使用占位符);
? :name 占位符
(3)绑定参数
① ?作为占位符 bindValue(序号,值);
② :name作为占位符 bindValue(占位符,变量);
③ :name作为占位符 $arr=array('占位符'=>'值');
(4)执行
$stmt->execute($arr);
(5)处理结果
① 结果集foreach fetch fetchAll
② 受影响行数 rowCount();
1 //使用数据库抽象层进行预处理操作 2 3 //1. 实例化 4 $pdo = new PDO('mysql:host=localhost;dbname=lamp183;charset=utf8','root',''); 5 6 //2. 发送预处理指令 7 8 //增加 9 $stmt = $pdo->prepare('insert into user (username,password) values (:name,:pass)');10 11 //3. 给预处理指令绑定相应的值12 //第一种绑定方式13 // $stmt->bindValue(1,'qiaojing');14 // $stmt->bindValue(2,'qiaojing');15 16 //第二种绑定方式17 // $uname = '鸿泽';18 // $upass = '鸿泽';19 // $stmt->bindParam(':name',$uname);20 // $stmt->bindParam(':pass',$upass);21 22 //第三种绑定方式23 $arr = array(24 ':name'=>'召勇',25 ':pass'=>'召勇'26 );27 28 //4. 执行29 $stmt->execute($arr);30 31 //5. 处理结果32 if($stmt->rowCount()>0){33 $id = $pdo->lastInsertId();34 echo '添加成功!ID号为:'.$id;35 }else{36 echo '添加失败!';37 }38 // echo $stmt->rowCount();
4.事务处理
(1)表的类型必须是innodb
show create table user;
alter table user engine=innodb;
(2)$pdo->beginTransAction(); 开启
$pdo->rollBack(); 回滚
$pdo->commit(); 事务结束
1 //使用PDO抽象类,实现事务处理 2 //1.实例化 3 $pdo = new PDO('mysql:host=localhost;dbname=lamp183;charset=utf8;','root',''); 4 5 //2.发送语句 6 //(1)开启事务处理 7 $pdo->beginTransaction(); 8 9 //(2)修改我自己的数据10 $num1 = $pdo->exec('update user set acount = acount - 100000 where id = 1');11 12 //判断我的修改语句是否有问题13 if(!$num1){14 $pdo->rollBack(); //如果事务出现问题,则滚回去15 die('交易失败,请查询后再转钱!');16 }17 18 //(3)修改别人的数据19 $num2 = $pdo->exec('update user set acount = acount + 100000 where id = 2');20 21 //判断别人的修改语句是否有问题22 if(!$num2){23 $pdo->rollBack();24 die('交易失败!转钱的过程当中遇到了问题!');25 }26 27 //3.处理结果28 if($num1 && $num2){29 echo '恭喜,交易成功!';30 }31 32 //(4)结束33 $pdo->commit();