您的位置:首页 > 数据库

面向对象,PDO基础知识,PDO预处理,SQL事务处理

2016-12-06 15:42 225 查看

PDO:数据库抽象层

PDO特点:跨数据库,支持预处理,支持事务

PDO的基本使用

1,实例化对象
实例化对象( new PDO() )
$pdo=new PDO(参数1,参数2,参数3);
参数:
1,数据库类型:主机名,数据库名,字符集,端口号(数据库类型必须小写)
2,用户名
3,密码
$pdo=new PDO('mysql:host=localhost;dbname=test2;charset=utf8;port=3306','root','admin');

2,发送sql语句
查询用(query),执行(增删改)用exec
如:$pdo->query('select * from test2')
query:返回结果集对象;
exec:返回受影响的行数;

3,处理查询结果
foreach:遍历结果集对象,如:foreach($res as $v =>$k){}
fetch:提取一条数据,如:$rows=$res->fetch();
fetchAll:提取所有数据;$rows=$res->fetchAll();

函数
$pdo->lastInsertId();获取最后插入的id
$pdo->errorInfo();获取错误信息;


<?php


//使用pdo连接数据库

//1,实例化对象

$pdo=new PDO('mysql:host=localhost;dbname=test1;charset=utf8;port=3306','root','admin') or die('数据库连接失败');


//发送SQL语句,查询用query,执行(增删改)用exec()

$res=$pdo->query('select *from test2');

$res=$pdo->exec("update test2 set name='张三1' where id=44");


//3,处理结果;

//3,1   query有结果集的情况

//3,1,1,foreach

foreach($res as $k=>$v){

var_dump($k);

var_dump($v);

}

//3,1,2,fetch 只返回一条结果集

$res->fetch();

var_dump($res);

//3,1,3,fetchAll返回所有的结果集

$rows=$res->fetchAll();

var_dump($rows);

//返回查询结果总数

//3,2   exec没有结果集直接返回受影响的行数

echo $res;


?>


PDO预处理

1,实例化对象;$pdo=new PDO()
2,发送预处理指令;两种方法:1:?; 2:起别名:name
$sql='select * from test2 where name=? and passwd=? ';
$stmt=$pdo->prepare($sql);
3,绑定参数 bindValue;三种方法:1,bindValue; 2,bindParam; 3,数组
$stmt->bindValue(1,$name);
$stmt->bindValue(2,$passwd);
4,执行发送
$stmt->execute();
5,处理返回结果
$res=$stmt->fetch()


代码部分

<?php


//pdo预处理

//1,实例化对象

$pdo=new PDO('mysql:host=localhost;dbname=test1;charset=utf8;prot=3306','root','admin');

//2,发送sql指令

//1,?形式;

$sql="select *from test2 where name=? and passwd=?";

//2,: 起别名

//$sql="select * from test2 where name=:name and passwd=:passwd";

$stmt=$pdo->prepare($sql);


//3,绑定参数

//1,bindValue

$stmt->bindValue(1,'张三');

$stmt->bindValue(2,'admin');

//2,bindParam,次方法中第二个参数不能为固定值

$stmt->bindParam(1,$name);

$stmt->bindParam(2,$passwd);

//3,array()数组形式

$arr=array('张三','admin');//?

$arr=array(':name'=>'张三',':passwd'=>'admin');//:起别名


//4,发送执行

$stmt->execute($arr);//数组形式时在这里必须传入数组

$res=$stmt->fetchAll(PDO::FETCH_NUM);

var_dump($res);


?>


MySQL事务处理

将多条sql语句(增删改)作为一个操作单元,要么都成功,要么都失败;
ps:操作表必须是innoDB
事务处理的步骤:
$pdo->beginTransaction():开启事务
$pdo->commit():提交一次事务
$pdo->rollback():回滚一次事务


 代码部分

<?php


//mysql事务处理

//实例化对象

$pdo=new PDO('mysql:host=localhost;dbname=test1;charset=utf8;port=3306','root','admin');

//开启事务

$pdo->begintransaction();


try{

//sql操作

$num=$pdo->exec("update test2 set name='张三1111' where id=8");


if($num <1 ){

throw new PDOException('第一个失败了',10086);//抛出错误

}


//sql操作

$num1=$pdo->exec("update test2 set name='李四2222' where id=9");

if($num1 <1){

throw new PDOException('第二个失败了',10010);//抛出错误

}


if($num>=1 && $num1 >=1){

$pdo->commit();//成功的话提交事务

echo "两个都成功了";

}


}catch(PDOException $e){

$pdo->rollback();// 如果失败回滚

echo $e->getMessage();

echo $e->getCode();

}


?>


setAttribute

设置结果集提取的类型:$pdo->setAttribute();
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MEDO,PDO::FETCH_NUM);

PDO::FETCH_ASSOC:关联数组
PDO::FETCH_NUM:索引数组

设置结果集键名的大小写:
$pdo->setAttribute(PDO::ATTR_CASE,PDO::CASE:UPPER)
(PDO::ATTR_CASE,PDO::CASE:LOWER)

设置错误处理模式:
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION)
(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING)

获得模式:$pdo->getAttribute(PDO::ERRMODE)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: