首页 > 语言 > PHP > 正文

PDO的数据库操作类

2024-09-04 11:44:15
字体:
来源:转载
供稿:网友
  1. /* 
  2.   参数说明 
  3.   int   $debug   是否开启调试,开启则输出sql语句 
  4.   int   $mode   0 返回数组 
  5.          1 返回单条记录 
  6.          2 返回行数 
  7.   string  $table   数据库表 
  8.   string  $fields   需要查询的数据库字段,允许为空,默认为查找全部 
  9.   string  $sqlwhere  查询条件,允许为空 
  10.   string  $orderby  排序,允许为空,默认为id倒序 
  11.   */ 
  12.  function hrSelect($debug$mode$table$fields="*"$sqlwhere=""$orderby="id desc"){ 
  13.   global $pdo
  14.   if($debug){ 
  15.    if($mode == 2){ 
  16.     echo "select count(*) from $table where 1=1 $sqlwhere order by $orderby"
  17.    }elseif($mode == 1){ 
  18.     echo "select $fields from $table where 1=1 $sqlwhere"
  19.    }else
  20.     echo "select $fields from $table where 1=1 $sqlwhere order by $orderby"
  21.    } 
  22.    exit
  23.   }else
  24.    if($mode == 2){ 
  25.     $rs = $pdo->query("select count(*) from $table where 1=1 $sqlwhere order by $orderby"); 
  26.     $return = $rs->fetchColumn(); 
  27.    }elseif($mode == 1){ 
  28.     $rs = $pdo->query("select $fields from $table where 1=1 $sqlwhere"); 
  29.     $return = $rs->fetch(); 
  30.    }else
  31.     $rs = $pdo->query("select $fields from $table where 1=1 $sqlwhere order by $orderby"); 
  32.     $return = $rs->fetchAll(); 
  33.    } 
  34.    return $return
  35.   } 
  36.  } 
  37.   
  38.  /* 
  39.   参数说明 
  40.   int   $debug   是否开启调试,开启则输出sql语句 
  41.   int   $mode   0 默认insert,无返回信息 
  42.          1 返回执行条目数 
  43.          2 返回最后一次插入记录的id 
  44.   string  $table   数据库表 
  45.   string  $fields   需要插入数据库的字段 
  46.   string  $values   需要插入数据库的信息,必须与$fields一一对应 
  47.  */ 
  48.  function hrInsert($debug$mode$table$fields$values){ 
  49.   global $pdo
  50.   if($debug){ 
  51.    echo "insert into $table ($fields) values ($values)"
  52.    exit
  53.   }else
  54.    if($mode == 2){ 
  55.     $return = $pdo->lastInsertId("insert into $table ($fields) values ($values)"); 
  56.    }elseif($mode == 1){ 
  57.     $return = $pdo->exec("insert into $table ($fields) values ($values)"); 
  58.    }else
  59.     $pdo->query("insert into $table ($fields) values ($values)"); 
  60.     exit
  61.    } 
  62.    return $return
  63.   } 
  64.  } 
  65.   
  66.  /* 
  67.   参数说明 
  68.   int   $debug   是否开启调试,开启则输出sql语句 
  69.   int   $mode   0 默认update,无返回信息 
  70.          1 返回执行条目数 
  71.   string  $table   数据库表 
  72.   string  $set   需要更新的字段及内容,格式:a='abc',b=2,c='2010-10-10 10:10:10' 
  73.   string  $sqlwhere  修改条件,允许为空 
  74.  */ 
  75.  function hrUpdate($debug$mode$table$set$sqlwhere=""){ 
  76.   global $pdo
  77.   if($debug){ 
  78.    echo "update $table set $set where 1=1 $sqlwhere"
  79.    exit
  80.   }else
  81.    if($mode==1){ 
  82.     $return = $pdo->exec("update $table set $set where 1=1 $sqlwhere"); 
  83.    }else
  84.     $pdo->query("update $table set $set where 1=1 $sqlwhere"); 
  85.     exit
  86.    } 
  87.    return $return
  88.   } 
  89.  } 
  90.   
  91.  /* 
  92.   参数说明 
  93.   int   $debug   是否开启调试,开启则输出sql语句 
  94.   int   $mode   0 默认delete,无返回信息 
  95.          1 返回执行条目数 
  96.   string  $table   数据库表 
  97.   string  $sqlwhere  删除条件,允许为空 
  98.  */ 
  99.  function hrDelete($debug$mode$table$sqlwhere=""){ 
  100.   global $pdo
  101.   if($debug){ 
  102.    echo "delete from $table where 1=1 $sqlwhere"
  103.    exit
  104.   }else
  105.    if($mode == 1){ 
  106.     $return = $pdo->exec("delete from $table where 1=1 $sqlwhere"); 
  107.    }else
  108.     $pdo->query("delete from $table where 1=1 $sqlwhere"); 
  109.     exit
  110.    } 
  111.    return $return
  112.   } 
  113.  } 

 

另外一段代码是基于我这个数据库操作类的事务实例,注意,数据库操作表类型必须为InnoDB,其他类型不支持事务.

PDO事务机制:

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

$pdo->commit();    --结束事务

$pdo->rollBack();   --回滚操作

示例,用try/catch包住db操作,当事务内的db操作出现中断,则执行回滚并抛出异常信息,代码如下:

  1. try{ 
  2.   $pdo->beginTransaction(); 
  3.   hrInsert(0,1,"class","name,parentid","'god',0"); //可以正常执行 
  4.   hrInsert(0,0,0,"tb_searchlog","userid,code","4"); //出错 
  5.   $pdo->commit(); 
  6. //开源代码Vevb.com 
  7.  }catch(Exception $e){ 
  8.   $pdo->rollBack(); 
  9.   echo "Failed: " . $e->getMessage(); 
  10.  }

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表