pdo

pdo
概念:PHP data object  数据库的抽象层
pdo特点:支持预处理,支持事务,支持跨数据库
pdo是一个PHP的扩展,用的时候需要先添加插件,在配置文件中开启pdo,然后重启就能用了
---------------------------------------------------------------
基本使用
要想使用pdo要先
1,实例化pdo的对象
$pdo = new PDO('mysql:host=localhost;dbname=数据库名;charset=字符集;port=端口号','root','');
注意new对象传三个参数,参数1是数据库的主机,数据库的名字,用的字符集,端口号(端口号可以不写),参数2是用户名,一般都是root用户,参数三是密码
2,发送sql指令,
有query()方法和exec()方法,他们两个方法的参数都是一条SQL语句,query()用来执行查询语句,:query函数有个“非常好处”,就是可以直接遍历这个返回的记录集。exec()方法执行的是增删改语句,query返回值是一个结果集,--->返回一个PDOstatement对象,exec()方法返回的是当前的响应行数,插入一条数据就会返回数字一,
3.处理结果集
$rows = $stmt->fetch(); //获取结果集当中的一条数据
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);获取结果集当中的所有数据(关联式),返回的是结果是一个关联数组
$rows = $stmt->fetchAll(PDO::FETCH_NUM);获取结果集当中的所有数据(索引式),返回的结果是一个索引式的数组


注意$stmt是执行query方法得到的结果集对象


--------------------------------------------------
pdo的预处理
1,实例化pdo对象,
2,执行预处理方法$stmt = $pdo->prepare(SQL语句);返回一个结果集,注意,SQL语句中会改变的部分用占位符来表示,占位符有(:加字符串)和(?)
3,绑定值,给占位符的部分绑定值,绑定的方法有三种,
bindValue(数字,值),和bindParam(占位符,值)这两种不常用,
第三种推荐用--->$arr = array(
':name'=>$_POST['uname'],
':pass'=>$_POST['upass']
);
4,执行$stmt->execute($arr);
定义一个数组,键时占位符,值是占位符对应的值,然后然预处理结果集对象调用execute(数组)方法;
5.处理结果$res = $stmt->fetch();以后语句不一定是这一句,根据需要写如何处理数据
pdo对象的一些常用的函数
$pdo -> lastInsertId();//返回上一步添加成功的ID号
$pdo->errorInfo();//获取修改错误的信息
$pdo->prepare(SQL语句);发送预处理语句
$pdo->beginTransaction();开启事务
$pdo->rollBack();回滚事务
$pdo->commit();提交事务,结束事务


PDO的预处理类常用的成员方法$stmt
execute($arr)负责执行一个准备好的预处理查询
fetch()返回结果集的下一行,尾端(到头)返回false
rowCount()返回使用query 方法执行的SELECT语句后受影响的总行数
fetchAll() 通过一次调用就可以获得结果集中的所有行,并赋给返回的数组

----------------------------------------------------------------
事务操作(注意:表的类型必须是innodb)
1,实例化对象
2,发送语句
a开启事务处理
$pdo->beginTransaction();
执行一个操作,判断是否操作成功,不成功回滚,成功则去执行另外一个操作,另一个操作如果不成功则回滚,$pdo->rollBack();后面如果还有类似的操作也是这样的,经过几次操作,把几次操作的结果放到一个if表达式中进行判断,如果都成功了,则提交事务$pdo->commit();
----------------------------------------------------------------
代码如下
<?php 


//使用PDO抽象类,实现事务处理
//1.实例化
$pdo = new PDO('mysql:host=localhost;dbname=lamp183;charset=utf8;','root','');


//2.发送语句
//(1)开启事务处理
$pdo->beginTransaction();


//(2)修改我自己的数据
$num1 = $pdo->exec('update user set acount = acount - 100000 where id = 1');

//判断我的修改语句是否有问题
if(!$num1){
$pdo->rollBack(); //如果事务出现问题,则滚回去
die('交易失败,请查询后再转钱!');
}


//(3)修改巧玲的数据
$num2 = $pdo->exec('update user set acount = acount + 100000 where id = 2');

//判断巧玲的修改语句是否有问题
if(!$num2){
$pdo->rollBack();
die('交易失败!转钱的过程当中遇到了问题!');
}


//3.处理结果
if($num1 && $num2){
echo '恭喜,交易成功!';
}


//(4)结束
$pdo->commit();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值