本篇文章主要介绍了pdo的安全处理与事物处理方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
事务 (transaction) 是操作数据库中很重要的一个功能, 它可以让你预定一条, 或者一系列 sql 语句, 然后一起执行,并且在执行的过程中, 如果其中的某条执行失败, 可以回滚所有已更改的操作. 如果执行成功, 那么这一系列操作都会永久有效. 事务很好的解决了在操作数据库的时候不同步的问题. 同时, 通过事务去执行大数据量的时候, 执行效率可以提高很多很多.
事务处理具有四个特性:原子性、一致性、独立性、持久性。并不是所有的数据库都支持事务处理的,pdo 为能够执行事务处理的数据库提供事务支持。
一.pdo异常处理
pdo::attr_errmode
1) pdo::attr_errmode//不报错误(忽略)(0)
2) pdo::errmode_warning
//以警告的方式报错(1)
3) pdo::errmode_exception //以异常的方式报错(2)
<?php
//默认是pdo::attr_errmode 不报错误(忽略)(0),需要用errorcode()、errorinfo()
try{
$pdo=new pdo("mysql:host=localhost;dbname=myapp","root","");
// $pdo->setattribute(pdo::attr_errmode,pdo::errmode_warning);
$pdo->setattribute(pdo::attr_errmode,pdo::errmode_exception);
}catch (pdoexception $e){
die("fail to connect db".$e->getmessage());
}
$sql="insert into user values(null,'dabao','26')";
try{
$res=$pdo->exec($sql);
}catch (pdoexception $e){
echo $e->getmessage();
}
//$res=$pdo->exec($sql);
//if($res){
// echo 'ok';
//}else{
// echo $pdo->errorcode();
// echo '<br/>';
// print_r($pdo->errorinfo());
//}
二.pdo预处理方法
1) prepare() //用于执行查询sql语句,返回pdostatement对象
2) bindvalue() //将值绑定到对应的一个参数,返回布尔值
3) bindparam() //将参数绑定到相应的查询占位符上,返回布尔值
4) bindcolumn() //用来匹配列名和一个指定的变量名
5) execute() // 执行一个准备好了的预处理语句,返回布尔值
6) rowcount() // 返回使用增、删、改、查操作语句后受影响的行总数
<?php
/**
* ?号式的预处理语句,共有三种绑定方式
*/
//1.连接数据库
try{
$pdo=new pdo("mysql:host=localhost;dbname=myapp","root","");
}catch (pdoexception $e){
die("fail to connect db".$e->getmessage());
}
//2.预处理的sql语句
$sql="insert into users(id,name,age) values(?,?,?)";
$stmt=$pdo->prepare($sql);
//3.对?号的参数进行绑定
$id=null;
$name="test103";
$age=103;
//第一种绑定方式
//$stmt->bindvalue(1,$id);
//$stmt->bindvalue(2,$name);
//$stmt->bindvalue(3,$age);
//第二种绑定方式
//$stmt->bindparam(1,$id);
//$stmt->bindparam(2,$name);
//$stmt->bindparam(3,$age);
//4.执行
//$stmt->execute();
//第三种绑定方式:直接执行数组
$stmt->execute(array($id,$name,$age));
echo $stmt->rowcount();
<?php
/**
* 别名式的预处理语句,共有三种绑定方式
*/
//1.连接数据库
try{
$pdo=new pdo("mysql:host=localhost;dbname=myapp","root","");
}catch (pdoexception $e){
die("fail to connect db".$e->getmessage());
}
//2.预处理的sql语句
$sql="insert into users(id,name,age) values(:id,:name,:age)";
$stmt=$pdo->prepare($sql);
//3.参数进行绑定
$id=null;
$name="test203";
$age=23;
//第一种绑定方式
//$stmt->bindvalue("id",$id);
//$stmt->bindvalue("name",$name);
//$stmt->bindvalue("age",$age);
//第二种绑定方式
//$stmt->bindparam("id",$id);
//$stmt->bindparam("name",$name);
//$stmt->bindparam("age",$age);
//4.执行
//$stmt->execute();
//第三种绑定方式:直接执行数组
$stmt->execute(array("id"=>$id,"name"=>$name,"age"=>$age));
echo $stmt->rowcount();
<?php
/**
* 用预处理方式查询数据
*/
//1.连接数据库
try{
$pdo=new pdo("mysql:host=localhost;dbname=myapp","root","");
}catch (pdoexception $e){
die("fail to connect mysql".$e->getmessage());
}
//2.预处理查询
$sql="select id,name,age from users";
$stmt=$pdo->prepare($sql);
//3.执行
$stmt->execute();
foreach($stmt as $val){
echo $val['id']."------".$val['name']."------".$val['age']."<br/>";
}
三.事务处理操作方法介绍
1) begintransaction() //开启一个事物(做一个回滚点)
2) commit()
//提交事务
3) rollback() //事务回滚操作
<?php
//1.连接数据库
try{
$pdo=new pdo("mysql:host=localhost;dbname=myapp","root","");
$pdo->setattribute(pdo::attr_errmode,pdo::errmode_exception);
}catch (pdoexception $e){
die("fail to connect db".$e->getmessage());
}
//2.执行数据操作
try{
//开启事物
$pdo->begintransaction();
$sql="insert into users(id,name,age) values(?,?,?)";
$stmt=$pdo->prepare($sql);
//传入参数
$stmt->execute(array(null,"test1","21"));
$stmt->execute(array(null,"test2","22"));
$stmt->execute(array(null,"test3","23"));
//提交事物
$pdo->commit();
}catch (pdoexception $e){
die("fail to execute".$e->getmessage());
//事物回滚
$pdo->roolback();
}
以上就是本文的全部内容,希望对大家的学习有所帮助。
相关推荐:
php处理抢购类高并发请求实现详解
php在windows内怎么取得cpu内存实时使用率
php折半查找算法案例详解
以上就是pdo的安全处理与事物处理方法的详细内容。