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();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • PHP5中使用PDO连接数据库的方法

    1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php_mysql.dll.php_pgsql.dll.php_mssql.dll.php_sqlite.dll等等. PHP6中也将默认使用PDO的方式连接,mysql扩展将被作为辅助 2.PDO配置 PHP.ini中,去掉"extension=php_pdo.dll"前面

  • 封装一个PDO数据库操作类代码

    复制代码 代码如下: <?php /** * 数据库PDO操作 */ class MysqlPdo { public static $PDOStatement = null; /** * 数据库的连接参数配置 * @var array * @access public */ public static $config = array(); /** * 是否使用永久连接 * @var bool * @access public */ public static $pconnect = false;

  • PHP PDO函数库详解

    目前而言,实现"数据库抽象层"任重而道远,使用PDO这样的"数据库访问抽象层"是一个不错的选择. PDO中包含三个预定义的类 PDO中包含三个预定义的类,它们分别是 PDO.PDOStatement 和 PDOException. 一.PDO PDO->beginTransaction() - 标明回滚起始点PDO->commit() - 标明回滚结束点,并执行SQLPDO->__construct() - 建立一个PDO链接数据库的实例PDO-&

  • php使用PDO方法详解

    本文详细分析了php使用PDO方法.分享给大家供大家参考.具体分析如下: PDO::exec:返回的是int类型,表示影响结果的条数. 复制代码 代码如下: PDOStatement::execute 返回的是boolean型,true表示执行成功,false表示执行失败,这两个通常出现在如下代码: 复制代码 代码如下: $rs0 = $pdo->exec($sql); $pre = $pdo->prepare($sql); $rs1 = $pre->execute(); 一般情况下可以

  • Php中用PDO查询Mysql来避免SQL注入风险的方法

    当我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失去控制.虽然可以用mysql_real_escape_string()函数过滤用户提交的值,但是也有缺陷.而使用PHP的PDO扩展的 prepare 方法,就可以避免sql injection 风险. PDO(PHP Data Object) 是PHP5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连

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

    事务 (Transaction) 是操作数据库中很重要的一个功能, 它可以让你预定一条, 或者一系列 SQL 语句, 然后一起执行,并且在执行的过程中, 如果其中的某条执行失败, 可以回滚所有已更改的操作. 如果执行成功, 那么这一系列操作都会永久有效. 事务很好的解决了在操作数据库的时候不同步的问题. 同时, 通过事务去执行大数据量的时候, 执行效率可以提高很多很多. 事务处理具有四个特性:原子性.一致性.独立性.持久性.并不是所有的数据库都支持事务处理的,PDO 为能够执行事务处理的数据库提

  • php使用pdo连接并查询sql数据库的方法

    本文实例讲述了php使用pdo连接并查询sql数据库的方法.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: $login = "root"; $passwd = "mysql"; try{   $db=new pdo('mysql:host=localhost;dbname=mysql',$login,$passwd);   foreach($db->query('select * from test') as $row){   print_

  • php PDO判断连接是否可用的实现方法

    mysql_ping() 检查到服务器的连接是否正常.如果到服务器的连接可用,则返回true,否则返回false. 但PDO不支持mysql_ping()方法,因此需要自己编写代码模拟mysql_ping()方法,检查连接是否可用. 代码如下: <?php /** * 检查连接是否可用 * @param Link $dbconn 数据库连接 * @return Boolean */ function pdo_ping($dbconn){ try{ $dbconn->getAttribute(P

  • php实现PDO中捕获SQL语句错误的方法

    本文实例讲述了php实现PDO中捕获SQL语句错误的方法.分享给大家供大家参考,具体如下: 使用默认模式-----PDO::ERRMODE_SILENT 在默认模式中设置PDOStatement对象的errorCode属性,但不进行其他任何操作. 例如: 通过prepare()和execute()方法向数据库中添加数据,设置PDOStatement对象的erroCode属性,手动检测代码中的错误,操作步骤如下. $dbms='mysql';//数据库类型 $dbName='admin';//使用

  • php pdo oracle中文乱码的快速解决方法

    在/etc/profile.d/简历oracle.sh 内容如下在NLS_LANG设置编码 ORACLE_HOME=/usr/lib/oracle/12.1/client64 C_INCLUDE_PATH=/usr/include/oracle/12.1/client64 LD_LIBRARY_PATH=$ORACLE_HOME/lib #remember this is the client NLS_LANG not the server one NLS_LANG=FRENCH_FRANCE.

  • PHP使用PDO抽象层获取查询结果的方法示例

    本文实例讲述了PHP使用PDO抽象层获取查询结果的方法.分享给大家供大家参考,具体如下: PHP使用PDO抽象层获取查询结果,主要有三种方式: (1)PDO::query()查询. 看下面这段php代码: <?php //PDO::query()查询 $psql="SELECT * FROM user"; $res = $db->query($psql); $res->setFetchMode(PDO::FETCH_NUM); //数字索引方式 while ($row

  • Spring + mybatis + mysql使用事物的几种方法总结

    前言 本文主要记录下spring是如何支持事物的,以及在Spring结合mybatis时,可以怎么简单的实现数据库的事物功能,下面话不多说了,来一起看看详细的介绍吧. I. 前提 case1:两张表的的事物支持情况 首先准备两张表,一个user表,一个story表,结构如下 CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL DEFAULT '' COMM

  • php的PDO事务处理机制实例分析

    本文实例讲述了php的PDO事务处理机制.分享给大家供大家参考,具体如下: 事务 (Transaction) 是操作数据库中很重要的一个功能, 它可以让你预定一条, 或者一系列 SQL 语句, 然后一起执行,并且在执行的过程中, 如果其中的某条执行失败, 可以回滚所有已更改的操作. 如果执行成功, 那么这一系列操作都会永久有效. 事务很好的解决了在操作数据库的时候不同步的问题. 同时, 通过事务去执行大数据量的时候, 执行效率可以提高很多很多. 在PDO中同样可以实现事物处理的功能 1. 开启事

  • php PDO中文乱码解决办法

    // 方法一: PDO::__construct($dsn, $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8';")); // 方法二: PDO::__construct($dsn, $user, $pass); PDO::exec("SET NAMES 'utf8';"); 两种方法都能解决问题, 原理一样的, 使用哪中看自己喜欢了

  • PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例

    本文实例讲述了PHP实现基于PDO扩展连接PostgreSQL对象关系数据库的方法.分享给大家供大家参考,具体如下: $pdo = NULL; if(version_compare(PHP_VERSION, '5.3.6', '<')){ $pdo = new \PDO('pgsql:host=127.0.0.1;port=5432;dbname=postgredb1','postgres',"123456",array(\PDO::MYSQL_ATTR_INIT_COMMAND

随机推荐