找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1528|回复: 0
打印 上一主题 下一主题

PDO的安全处理与事物处理方法

[复制链接]

2647

主题

2647

帖子

7881

积分

论坛元老

Rank: 8Rank: 8

积分
7881
跳转到指定楼层
楼主
发表于 2018-2-14 05:31:23 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

            事务 (Transaction) 是操作数据库中很重要的一个功能, 它可以让你预定一条, 或者一系列 SQL 语句, 然后一起执行,并且在执行的过程中, 如果其中的某条执行失败, 可以回滚所有已更改的操作. 如果执行成功, 那么这一系列操作都会永久有效. 事务很好的解决了在操作数据库的时候不同步的问题. 同时, 通过事务去执行大数据量的时候, 执行效率可以提高很多很多.
事务处理具有四个特性:原子性、一致性、独立性、持久性。并不是所有的数据库都支持事务处理的,PDO 为能够执行事务处理的数据库提供事务支持。
一.PDO异常处理
PDO::ATTR_ERRMODE
1) PDO::ATTR_ERRMODE//不报错误(忽略)(0)
2) PDO::ERRMODE_WARNING
//以警告的方式报错(1)
3) PDO::ERRMODE_EXCEPTION  //以异常的方式报错(2)
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 '
';
//  print_r($pdo->errorInfo());
//}
二.PDO预处理方法
1) prepare()    //用于执行查询SQL语句,返回PDOStatement对象
2) bindValue()  //将值绑定到对应的一个参数,返回布尔值
3) bindParam()  //将参数绑定到相应的查询占位符上,返回布尔值
4) bindColumn() //用来匹配列名和一个指定的变量名
5) execute()    // 执行一个准备好了的预处理语句,返回布尔值
6) rowCount() // 返回使用增、删、改、查操作语句后受影响的行总数
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();
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();
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']."
";
}
三.事务处理操作方法介绍
1) beginTransaction()     //开启一个事物(做一个回滚点)
2) commit()  
   //提交事务
3) rollBack()            //事务回滚操作
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();
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
            
            
您可能感兴趣的文章:
  • 封装一个PDO数据库操作类代码
  • PHP PDO函数库详解
  • PHP5中使用PDO连接数据库的方法
  • Php中用PDO查询Mysql来避免SQL注入风险的方法
  • php使用PDO方法详解
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端