PDO
PDO是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力
=======PDO操作Mysql数据库=============
链接数据库:$pdo = new PDO('mysql:host=localhost;dbname=ceshi', $user, $pass)
设置字符集:$pdo->exec("set names utf8")
写sql语句,并执行,mysql服务器返回结果集(预处理对象):
$sql = "select * from student"
$ycl = $pdo->query($sql)
预处理对象调用数据(fetchAll(查询格式)查所有数据):$attr = $ycl->fetchAll(PDO::FETCH_ASSOC)
=============PDO类========
exec():用来执行增删改和设置的语句(例如设置字符集)
query():用来执行查询语句,并返回与处理结果集(再调用预处理类的方法进行下面的操作)
lastInsertId():最后一次插入的id
$sql = "insert into user values('','zhangsan1111','','')"; if($pdo->exec($sql)){ $lastid = $pdo->lastInsertId(); echo "id是{$lastid}的数据插入成功"; }
setAttribute():设置PDO的一些属性
$user = "root"; $pass = ""; $pdo = new PDO('mysql:host=localhost;dbname=ceshi', $user, $pass); $pdo->exec("set names utf8"); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);//设置查询数据返回的类型,这样就不用每次都写fetchAll(PDO::FETCH_ASSOC)了 $sql = "select * from student"; $ycl = $pdo->query($sql); //$attr = $ycl->fetchAll(PDO::FETCH_ASSOC); $attr = $ycl->fetchAll(); var_dump($attr);
==================预处理=======================
prepare():预处理sql语句
$user = "root"; $pass = ""; $pdo = new PDO('mysql:host=localhost;dbname=ceshi', $user, $pass); $pdo->exec("set names utf8"); $sql = "select * from student"; $ycl = $pdo->prepare($sql);//预处理,把sql语句保存准备,可防止sql注入,也能提高查询的效率,当另一个用户再次请求相同的sql,会先找到这个准备的sql,执行查询 $ycl->execute(); $attr = $ycl->fetchAll(PDO::FETCH_ASSOC);
bindValue():把一个值绑定到一个参数
$sql = "select * from student where sno =?";//我们要准备sql语句,为了防止每个人选择的sno不一样而导致重复的sql,我们设置sno=? $ycl = $pdo->prepare($sql);//预处理,准备sql $id = 098;//这个id是传递过来的参数 $ycl->bindValue(1,$id,PDO::PARAM_INT);//这句话的意思是:往第一个问号上绑定$id,并给$id设置类型PDO::PARAM_INT $ycl->execute();//执行 $attr = $ycl->rowCount(); var_dump($attr);
columnCount():返回表的列数
$sql = "select * from student"; $ycl = $pdo->prepare($sql);//预处理,准备sql $ycl->execute();//执行 $attr = $ycl->columnCount(); var_dump($attr);
fetch():从预处理返回第一条数据
$sql = "select * from student"; $ycl = $pdo->prepare($sql);//预处理,准备sql $ycl->execute();//执行 $attr = $ycl->fetch(PDO::FETCH_ASSOC); var_dump($attr);
fetchAll():返回混合数组
fetchColumn(n):从预处理里面查询某一行数据的第n列的值,执行第一次是第一行,执行第二次是第二行,不写n默认为0
rowCount():影响数据的行数
$sql = "select * from student"; $ycl = $pdo->prepare($sql);//预处理,准备sql $ycl->execute();//执行 $attr = $ycl->rowCount(); var_dump($attr);
execute():预处理执行
预处理实例:
$user = "root"; $pass = ""; $pdo = new PDO('mysql:host=localhost;dbname=ceshi', $user, $pass); $pdo->exec("set names utf8"); //查询的预处理 $sql = "select * from student"; $ycl = $pdo->prepare($sql);//预处理,准备sql $ycl->execute();//执行 $attr = $ycl->fetchAll(PDO::FETCH_ASSOC); //var_dump($attr); //增删改的预处理 $sql = "update student set name='' where sno = ''"; $ycl = $pdo->prepare($sql);//预处理,准备sql if($ycl->execute()){ $num = $ycl->rowCount();//得到影响行数 echo $num."行被删除了"; };//执行
=====================PDO实现事务机制======================
一、事件中所有任务都成功
开启事件
一件事件由多个任务组成,如果所有任务都成功,接着提交该事件
结束事件
二、事件中有一个任务失败
开启事件
一件事件由多个任务组成,其中一个任务失败则改时间完成,接着回滚改事件
结束事件
三、在事务中用到的PDO类的方法
begin Transaction(): 启动一个事务
commit():提交到数据库
rollback(): 回滚
四、在事务中用到的PDOException异常处理类的方法
getMessage():获取异常消息内容
getCode():获取异常代码
getLine():获取异常所在的行号