一、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();