zoukankan      html  css  js  c++  java
  • 一个基于PDO的数据库操作类(新) 一个PDO事务实例

     <?php 
    /* 
    * 作者:胡睿 
    * 日期:2011/03/19 
    * 电邮:hooray0905@foxmail.com 
    * 
    * 20110319 
    * 常用数据库操作,如:增删改查,获取单条记录、多条记录,返回最新一条插入记录id,返回操作记录行数等 
    * 20110630 
    * 整体修改方法,合并部分参数 
    * 规范代码,一个方法里只有1个return语句 
    */ 
    /* 
    参数说明 
    int $debug 是否开启调试,开启则输出sql语句 
    int $mode 0 返回数组 
    1 返回单条记录 
    2 返回行数 
    string $table 数据库表 
    string $fields 需要查询的数据库字段,允许为空,默认为查找全部 
    string $sqlwhere 查询条件,允许为空 
    string $orderby 排序,允许为空,默认为id倒序 
    */ 
    function hrSelect($debug, $mode, $table, $fields="*", $sqlwhere="", $orderby="id desc"){ 
    global $pdo; 
    if($debug){ 
    if($mode == 2){ 
    echo "select count(*) from $table where 1=1 $sqlwhere order by $orderby"; 
    }elseif($mode == 1){ 
    echo "select $fields from $table where 1=1 $sqlwhere"; 
    }else{ 
    echo "select $fields from $table where 1=1 $sqlwhere order by $orderby"; 
    } 
    exit; 
    }else{ 
    if($mode == 2){ 
    $rs = $pdo->query("select count(*) from $table where 1=1 $sqlwhere order by $orderby"); 
    $return = $rs->fetchColumn(); 
    }elseif($mode == 1){ 
    $rs = $pdo->query("select $fields from $table where 1=1 $sqlwhere"); 
    $return = $rs->fetch(); 
    }else{ 
    $rs = $pdo->query("select $fields from $table where 1=1 $sqlwhere order by $orderby"); 
    $return = $rs->fetchAll(); 
    } 
    return $return; 
    } 
    } 
    /* 
    参数说明 
    int $debug 是否开启调试,开启则输出sql语句 
    int $mode 0 默认insert,无返回信息 
    1 返回执行条目数 
    2 返回最后一次插入记录的id 
    string $table 数据库表 
    string $fields 需要插入数据库的字段 
    string $values 需要插入数据库的信息,必须与$fields一一对应 
    */ 
    function hrInsert($debug, $mode, $table, $fields, $values){ 
    global $pdo; 
    if($debug){ 
    echo "insert into $table ($fields) values ($values)"; 
    exit; 
    }else{ 
    if($mode == 2){ 
    $return = $pdo->lastInsertId("insert into $table ($fields) values ($values)"); 
    }elseif($mode == 1){ 
    $return = $pdo->exec("insert into $table ($fields) values ($values)"); 
    }else{ 
    $pdo->query("insert into $table ($fields) values ($values)"); 
    exit; 
    } 
    return $return; 
    } 
    } 
    /* 
    参数说明 
    int $debug 是否开启调试,开启则输出sql语句 
    int $mode 0 默认update,无返回信息 
    1 返回执行条目数 
    string $table 数据库表 
    string $set 需要更新的字段及内容,格式:a='abc',b=2,c='2010-10-10 10:10:10' 
    string $sqlwhere 修改条件,允许为空 
    */ 
    function hrUpdate($debug, $mode, $table, $set, $sqlwhere=""){ 
    global $pdo; 
    if($debug){ 
    echo "update $table set $set where 1=1 $sqlwhere"; 
    exit; 
    }else{ 
    if($mode==1){ 
    $return = $pdo->exec("update $table set $set where 1=1 $sqlwhere"); 
    }else{ 
    $pdo->query("update $table set $set where 1=1 $sqlwhere"); 
    exit; 
    } 
    return $return; 
    } 
    } 
    /* 
    参数说明 
    int $debug 是否开启调试,开启则输出sql语句 
    int $mode 0 默认delete,无返回信息 
    1 返回执行条目数 
    string $table 数据库表 
    string $sqlwhere 删除条件,允许为空 
    */ 
    function hrDelete($debug, $mode, $table, $sqlwhere=""){ 
    global $pdo; 
    if($debug){ 
    echo "delete from $table where 1=1 $sqlwhere"; 
    exit; 
    }else{ 
    if($mode == 1){ 
    $return = $pdo->exec("delete from $table where 1=1 $sqlwhere"); 
    }else{ 
    $pdo->query("delete from $table where 1=1 $sqlwhere"); 
    exit; 
    } 
    return $return; 
    } 
    } 
    ?> 
    
    另外一段代码是基于我这个数据库操作类的事务实例: 
    
    复制代码 代码如下:
    
    /* 
    注意,数据库操作表类型必须为InnoDB,其他类型不支持事务 
    PDO事务机制 
    $pdo->beginTransaction(); --开启事务 
    $pdo->commit(); --结束事务 
    $pdo->rollBack(); --回滚操作 
    
    示例,用try/catch包住db操作,当事务内的db操作出现中断,则执行回滚并抛出异常信息。 
    */ 
    try{ 
    $pdo->beginTransaction(); 
    hrInsert(0,1,"class","name,parentid","'god',0"); //可以正常执行 
    hrInsert(0,0,0,"tb_searchlog","userid,code","4"); //出错 
    $pdo->commit(); 
    }catch(Exception $e){ 
    $pdo->rollBack(); 
    echo "Failed: " . $e->getMessage(); 
    } 
  • 相关阅读:
    2.12 使用@DataProvider
    2.11 webdriver中使用 FileUtils ()
    Xcode8 添加PCH文件
    The app icon set "AppIcon" has an unassigned child告警
    Launch Image
    iOS App图标和启动画面尺寸
    iPhone屏幕尺寸、分辨率及适配
    Xcode下载失败 使用已购项目页面再试一次
    could not find developer disk image
    NSDate与 NSString 、long long类型的相互转化
  • 原文地址:https://www.cnblogs.com/hubing/p/3159254.html
Copyright © 2011-2022 走看看