PDO的使用

1.PDO 是一个扩展库,使用之前先要安装这个扩展库。

2.其次还需要安装对应的数据库驱动,例如,你如果用的是MySQL,需要安装MySQL的驱动pdo_mysql;如果用的是sqlite,需要安装sqlite的驱动pdo_sqllite等等.

3.使用 PDO :

(1)创建 PDO 对象

//host:主机名,dbname:数据库名
$dsn = 'mysql:host=localhost;dbname=demo;charset=utf8';
$username = 'root';
$password = '123456';

try{
  $pdo = new PDO($dsn, $username, $password);

  //设置错误模式-警告,报错方式不友好,不常用
  //$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARING);

  //设置错误模式-抛出异常,常用
  $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
  die('数据库连接失败'.$e->getMessage());
}

(2)执行数据库操作

i.PDO执行sql语句
exec 执行不要结果集的语句 例如 增删改
query 执行要结果集的语句 例如 查 desc

try{
  $sql = 'inster into user(name, password, money) values("test", "123456", "1000")';
  $sql2 = 'select * from user';
  //exec返回影响的行数
  $res = $pdo->exec($sql);

  //quer返回预处理对象,常用于查询语句select
  $res2 = $pdo->query($sql);

  if($res>0){
    echo 'success';
    //返回最后插入的数据的ID
    echo $pdo->lastInsertId();
  }else{
    echo 'failed';
  }
}catch(PDOException $e){
  echo $e->getMessage();
}

ii.事务处理
事务:多条sql语句必须全部执行成功,只要有一条没有执行成功,就要进行回滚,回滚到初始的状态
【注】:表引擎有两种 myisam(不支持事务) innodb(支持事务)
$pdo->beginTransaction(); //开启一个事务
$pdo->commit(); //提交事务
$pdo->rollback(); //回滚到初始状态

try{
  //开启事务
  $pdo->beginTransaction();

  //转出500
  $sql = 'update user set money=money-500 where id=1';
  $res = $pdo->exec($sql);

  if($res > 0){
    echo 'out success';
  }else{
    throw new PDOException('out failed');
  }

  //转入500
  $sql = 'update user set money=money+500 where id=2';
  $res = $pdo->exec();

  if($res > 0){
    echo 'in success';
  }else{
    throw new PDOException('in failed');
  }

  //提交事务
  $pdo->commit();

  echo 'trade success';

}catch(PDOException $e){
  //失败回滚
  $pdo->rollback();

  echo $e->getMessage();
}

iii.预处理
优点;效率高,安全(可以有效的防治sql注入)

try{
  $sql = 'insert into user (name,password,money) values(:name,:password,:money)';
  $stmt = $pdo->prepare($sql);
  $stmt->execute([:name => 'test',:password => '123456',:money => 1000]);
}catch(PDOException $e){
  echo $e->getMessage();
}

iiii.提取结果集

try{
  $sql = 'select name,password,money from user';
  $stmt = $pdo->prepare($sql);
  $stmt->execute();
  //获取关联模式的结果集
  //绑定列 bindColumn('name',$name);
  //fetchAll 获取所有数据,fetch 获取单条数据
  $res = $stmt->fetch(PDO::FETCH_ASSOC);
  var_dump($res);
}catch(PDOException $e){
  echo $e->getMessage();
}
原文地址:https://www.cnblogs.com/chengzi-he/p/9884151.html