PDO的数据库操作类

  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. int $debug 是否开启调试,开启则输出sql语句
  40. int $mode 0 默认insert,无返回信息
  41. 1 返回执行条目数
  42. 2 返回最后一次插入记录的id
  43. string $table 数据库表
  44. string $fields 需要插入数据库的字段
  45. string $values 需要插入数据库的信息,必须与$fields一一对应
  46. */
  47. function hrInsert($debug, $mode, $table, $fields, $values){
  48. global $pdo;
  49. if($debug){
  50. echo "insert into $table ($fields) values ($values)";
  51. exit;
  52. }else{
  53. if($mode == 2){
  54. $return = $pdo->lastInsertId("insert into $table ($fields) values ($values)");
  55. }elseif($mode == 1){
  56. $return = $pdo->exec("insert into $table ($fields) values ($values)");
  57. }else{
  58. $pdo->query("insert into $table ($fields) values ($values)");
  59. exit;
  60. }
  61. return $return;
  62. }
  63. }
  64. /*
  65. 参数说明
  66. int $debug 是否开启调试,开启则输出sql语句
  67. int $mode 0 默认update,无返回信息
  68. 1 返回执行条目数
  69. string $table 数据库表
  70. string $set 需要更新的字段及内容,格式:a='abc',b=2,c='2010-10-10 10:10:10'
  71. string $sqlwhere 修改条件,允许为空
  72. */
  73. function hrUpdate($debug, $mode, $table, $set, $sqlwhere=""){
  74. global $pdo;
  75. if($debug){
  76. echo "update $table set $set where 1=1 $sqlwhere";
  77. exit;
  78. }else{
  79. if($mode==1){
  80. $return = $pdo->exec("update $table set $set where 1=1 $sqlwhere");
  81. }else{
  82. $pdo->query("update $table set $set where 1=1 $sqlwhere");
  83. exit;
  84. }
  85. return $return;
  86. }
  87. }
  88. /*
  89. 参数说明
  90. int $debug 是否开启调试,开启则输出sql语句
  91. int $mode 0 默认delete,无返回信息
  92. 1 返回执行条目数
  93. string $table 数据库表
  94. string $sqlwhere 删除条件,允许为空
  95. */
  96. function hrDelete($debug, $mode, $table, $sqlwhere=""){
  97. global $pdo;
  98. if($debug){
  99. echo "delete from $table where 1=1 $sqlwhere";
  100. exit;
  101. }else{
  102. if($mode == 1){
  103. $return = $pdo->exec("delete from $table where 1=1 $sqlwhere");
  104. }else{
  105. $pdo->query("delete from $table where 1=1 $sqlwhere");
  106. exit;
  107. }
  108. return $return;
  109. }
  110. }

另外一段代码是基于我这个数据库操作类的事务实例,注意,数据库操作表类型必须为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. //开源代码phpfensi.com
  7. }catch(Exception $e){
  8. $pdo->rollBack();
  9. echo "Failed: " . $e->getMessage();
  10. }