PDO安全事务处理

来源:互联网 发布:xbox one 手柄 mac 编辑:程序博客网 时间:2024/04/29 11:58

PDO安全处理与事务处理

1. PDO异常处理

PDO异常处理介绍:


  • PDO::ATTR_ERRMODE://不报错(忽略)(0)
  • PDO::ERRMODE_WARNING: //以警告的方式报错(1)
  • PDO::ERRMODE_EXCEPTION://以异常处理方式报错(2)

举例:

<?php// 默认不提示错误信息,需要用errorCode(), errorInfo()try{    $pdo = new PDO("mysql:host=localhost; dbname=myapp", "root","");    }catch (PDOException $e){    die('Connection failed:'.$e->getMessage());}$sql = "INSERT INTO users(name, age) VALUES ('xy', 11)";$res = $pdo->exec($sql);if($res){    echo "sucess";}else{    //打印错误信息    echo $pdo->errorInfo();    print_r($pdo->errorInfo());}

设置错误报警:

<?php// 默认不提示错误信息,需要用errorCode(), errorInfo()try{    $pdo = new PDO("mysql:host=localhost; dbname=myapp", "root","");    //设置错误报警模式    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);//或者1}catch (PDOException $e){    die('Connection failed:'.$e->getMessage());}$sql = "INSERT INTO users(name, age) VALUES ('xy', 11)";$res = $pdo->exec($sql);if($res){    echo "sucess";}else{}

设置异常信息模式:

<?php// 默认不提示错误信息,需要用errorCode(), errorInfo()try{    $pdo = new PDO("mysql:host=localhost; dbname=myapp", "root","");    //设置成异常信息    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);}catch (PDOException $e){    die('Connection failed:'.$e->getMessage());}$sql = "INSERT INTO users(name, age) VALUES ('xy', 11)";try{    }catch (PDOException $e){    echo $e->getMessage();}

2. PDO预处理

PDO预处理方法:

  • prepare()  // 用于执行查询SQL语句,返回PDOStatement对象
  • bindValue() //将值绑定到对应的一个参数,返回布尔值
  • bindParam() // 将参数绑定到相应的查询占位符上,返回布尔值
  • bindColumn() // 用来匹配列名和一个指定的变量名
  • execute() // 执行一个准备好了的预处理语句,返回布尔值
  • rowCount() // 返回使用增,删,改,查操作语句后受影响的行总数。

绑定方法:

?式的绑定方法:

<?php/* * ?式的预处理语句,共有三种绑定方式 *///1.连接数据库try{    $pdo = new PDO("mysql:host=localhost; dbname=myapp", "root","");}catch (PDOException $e){    die('Connection failed:'.$e->getMessage());}//print_r($pdo);//2. 预处理的SQL语句$sql = "INSERT INTO users(id, name, age) VALUES (?,?,?)";//执行预处理语句$stmt = $pdo->prepare($sql);//3. 参数绑定的三种方法// i;(?式的绑定方式)$stmt->bindValue(1, null);$stmt->bindValue(2,'xyz');$stmt->bindValue(3, 33);// ii;(变量绑定方式)$stmt->bindParam(1,$id);$stmt->bindParam(2,$name);$stmt->bindParam(3,$age);$id = null;$name = 'xxx';$age = 24;// iii: 数组方式绑定$stmt->execute(array(null, 'zzz', 22));//4. 执行$stmt->execute();echo $stmt->rowCount();

别名的预处理方式:

<?php/* * 别名式的预处理语句,共有三种绑定方式 *///1.连接数据库try{    $pdo = new PDO("mysql:host=localhost; dbname=myapp", "root","");}catch (PDOException $e){    die('Connection failed:'.$e->getMessage());}//print_r($pdo);//2. 预处理的SQL语句$sql = "INSERT INTO users(id, name, age) VALUES (:id,:name,:age)";//执行预处理语句$stmt = $pdo->prepare($sql);//3. 参数绑定的三种方法// i;(?式的绑定方式)$stmt->bindValue("id", null);$stmt->bindValue("name",'xxyz');$stmt->bindValue("age", 33);//4. 执行$stmt->execute();// ii;(变量绑定方式)$stmt->bindParam("id",$id);$stmt->bindParam("name",$name);$stmt->bindParam("age",$age);$id = null;$name = 'xxxs';$age = 24;//4. 执行$stmt->execute();// iii: 数组方式绑定//$stmt->execute(array(null, 'zzzz', 22));$stmt->execute(array("id"=>null, "name"=>'zzzz',"age"=> 22));echo $stmt->rowCount();

预处理的查询:

<?php/* * 采用预处理SQL执行查询,并采用绑定结果方式输出 *///1.连接数据库try{    $pdo = new PDO("mysql:host=localhost; dbname=myapp", "root","");}catch (PDOException $e){    die('Connection failed:'.$e->getMessage());}//print_r($pdo);//2. 预处理的SQL语句$sql = "SELECT id,name,age FROM users ";//执行预处理语句$stmt = $pdo->prepare($sql);//3. 执行$stmt->execute();//$stmt->bindColumn(1, $id);$stmt->bindColumn(2, $name);$stmt->bindColumn("age", $age);while($val=$stmt->fetch(PDO::FETCH_COLUMN)){    echo "{$id}:{$name}:{$age}<br>";}//foreach($stmt as $val){//    echo $val['id'].'...'.$val['name'].'...'.$val['age'].'<br>';//}


3. PDO事务处理

数据表需要InnoDB类型

事务处理操作方法:

  • beginTransation() // 开启一个事务(做一个回滚点)
  • commit() // 提交事务
  • rollBack() // 事务回滚操作

<?php// 采用预处理+事务处理执行SQL操作//1.连接数据库try{    $pdo = new PDO("mysql:host=localhost; dbname=myapp", "root","");    $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);}catch (PDOException $e){    die('Connection failed:'.$e->getMessage());}print_r($pdo);//执行数据操作try{    //开启事务;    $pdo->beginTransaction();    $sql = "INSERT INTO users(id, name, age) VALUES (?,?,?)";    $stmt = $pdo->prepare($sql);    //传入参数    $stmt->execute(array(1,'xxxxu',22));    $stmt->execute(array(null,'zu',22));    $stmt->execute(array(null,'zxxxu',22));    //提交事务    $pdo->commit();}catch (PDOException $e){    die("fail to exec".$e->getMessage());    $pdo->rollBack();






0 0
原创粉丝点击