zoukankan      html  css  js  c++  java
  • 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();
    }
  • 相关阅读:
    redis是什么?
    mysql用户权限设置
    大白话说Java反射:入门、使用、原理 (转)
    iptables只允许指定ip访问本机的指定端口
    CSS系列——前端进阶之路:初涉Less
    MySQL分页查询优化
    linux 面试题
    CSS中定义CLASS时,中间有空格和没空格的区别是什么?
    MySQL Explain详解
    EBS 系统当前完成请求时间监测
  • 原文地址:https://www.cnblogs.com/chengzi-he/p/9884151.html
Copyright © 2011-2022 走看看