当前位置:首页 > PHP文摘 > 列表

PHP的PDO常用类库实例分析

发布:smiling 来源: PHP粉丝网  添加日期:2019-10-08 10:37:45 浏览: 评论:0 

本文实例讲述了PHP的PDO常用类库。分享给大家供大家参考,具体如下:

1、Db.class.php 连接数据库

  1. <?php 
  2.  
  3. // 连接数据库 
  4.  
  5. class Db { 
  6.  
  7.   static public function getDB() { 
  8.  
  9.     try { 
  10.  
  11.       $pdo = new PDO(DB_DSN, DB_USER, DB_PWD); 
  12.  
  13.       $pdo->setAttribute(PDO::ATTR_PERSISTENT, true); // 设置数据库连接为持久连接 
  14.  
  15.       $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 设置抛出错误 
  16.  
  17.       $pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true); // 设置当字符串为空转换为 SQL 的 NULL 
  18.  
  19.       $pdo->query('SET NAMES utf8'); // 设置数据库编码 
  20.  
  21.     } catch (PDOException $e) { 
  22.  
  23.       exit('数据库连接错误,错误信息:'$e->getMessage()); 
  24. //phpfensi.com 
  25.     } 
  26.  
  27.     return $pdo
  28.  
  29.   } 
  30.  
  31.  
  32. ?> 

2、Model.class.php 数据库操作类

  1. <?php 
  2.  
  3. /** 
  4.  
  5. * 数据库操作类库 
  6.  
  7. * author Lee. 
  8.  
  9. * Last modify $Date: 2012-1-19 13:59;04 $ 
  10.  
  11. */ 
  12.  
  13. class M { 
  14.  
  15.   private $_db//数据库句柄 
  16.  
  17.   public $_sql//SQL语句 
  18.  
  19.   /** 
  20.  
  21.    * 构造方法 
  22.  
  23.    */ 
  24.  
  25.   public function __construct() { 
  26.  
  27.     $this->_db = Db::getDB(); 
  28.  
  29.   } 
  30.  
  31.   /** 
  32.  
  33.    * 数据库添加操作 
  34.  
  35.    * @param string $tName 表名 
  36.  
  37.    * @param array $field 字段数组 
  38.  
  39.    * @param array $val 值数组 
  40.  
  41.    * @param bool $is_lastInsertId 是否返回添加ID 
  42.  
  43.    * @return int 默认返回成功与否,$is_lastInsertId 为true,返回添加ID 
  44.  
  45.    */ 
  46.  
  47.   public function insert($tName$fields$vals$is_lastInsertId=FALSE) { 
  48.  
  49.     try { 
  50.  
  51.       if (!is_array($fields) || !is_array($vals)) 
  52.  
  53.         exit($this->getError(__FUNCTION____LINE__)); 
  54.  
  55.       $fields = $this->formatArr($fields); 
  56.  
  57.       $vals = $this->formatArr($vals, false); 
  58.  
  59.       $tName = $this->formatTabName($tName); 
  60.  
  61.       $this->_sql = "INSERT INTO {$tName} ({$fields}) VALUES ({$vals})"
  62.  
  63.       if (!$is_lastInsertId) { 
  64.  
  65.         $row = $this->_db->exec($this->_sql); 
  66.  
  67.         return $row
  68.  
  69.       } else { 
  70.  
  71.         $this->_db->exec($this->_sql); 
  72.  
  73.         $lastId = (int)$this->_db->lastInsertId(); 
  74.  
  75.         return $lastId
  76.  
  77.       } 
  78.  
  79.     } catch (PDOException $e) { 
  80.  
  81.       exit($e->getMessage()); 
  82.  
  83.     } 
  84.  
  85.   } 
  86.  
  87.   /** 
  88.  
  89.    * 数据库修改操作 
  90.  
  91.    * @param string $tName 表名 
  92.  
  93.    * @param array $field 字段数组 
  94.  
  95.    * @param array $val 值数组 
  96.  
  97.    * @param string $condition 条件 
  98.  
  99.    * @return int 受影响的行数 
  100.  
  101.    */ 
  102.  
  103.   public function update($tName$fieldVal$condition) { 
  104.  
  105.     try { 
  106.  
  107.       if (!is_array($fieldVal) || !is_string($tName) || !is_string($condition)) 
  108.  
  109.         exit($this->getError(__FUNCTION____LINE__)); 
  110.  
  111.       $tName = $this->formatTabName($tName); 
  112.  
  113.       $upStr = ''
  114.  
  115.       foreach ($fieldVal as $k=>$v) { 
  116.  
  117.         $upStr .= '`'.$k . '`=' . '\'' . $v . '\'' . ','
  118.  
  119.       } 
  120.  
  121.       $upStr = rtrim($upStr','); 
  122.  
  123.       $this->_sql = "UPDATE {$tName} SET {$upStr} WHERE {$condition}"
  124.  
  125.       $row = $this->_db->exec($this->_sql); 
  126.  
  127.       return $row
  128.  
  129.     } catch (PDOException $e) { 
  130.  
  131.       exit($e->getMessage()); 
  132.  
  133.     } 
  134.  
  135.   } 
  136.  
  137.   /** 
  138.  
  139.    * 数据库删除操作(注:必须添加 where 条件) 
  140.  
  141.    * @param string $tName 表名 
  142.  
  143.    * @param string $condition 条件 
  144.  
  145.    * @return int 受影响的行数 
  146.  
  147.    */ 
  148.  
  149.   public function del($tName$condition) { 
  150.  
  151.     try { 
  152.  
  153.       if (!is_string($tName) || !is_string($condition)) 
  154.  
  155.         exit($this->getError(__FUNCTION____LINE__)); 
  156.  
  157.       $tName$this->formatTabName($tName); 
  158.  
  159.       $this->_sql = "DELETE FROM {$tName} WHERE {$condition}"
  160.  
  161.       $row = $this->_db->exec($this->_sql); 
  162.  
  163.       return $row
  164.  
  165.     } catch (PDOException $e) { 
  166.  
  167.       exit($e->getMessage()); 
  168.  
  169.     } 
  170.  
  171.   } 
  172.  
  173.   /** 
  174.  
  175.    * 返回表总个数 
  176.  
  177.    * @param string $tName 表名 
  178.  
  179.    * @param string $condition 条件 
  180.  
  181.    * @return int 
  182.  
  183.    */ 
  184.  
  185.   public function total($tName$condition='') { 
  186.  
  187.     try { 
  188.  
  189.       if (!is_string($tName)) 
  190.  
  191.         exit($this->getError(__FUNCTION____LINE__)); 
  192.  
  193.       $tName = $this->formatTabName($tName); 
  194.  
  195.       $this->_sql = "SELECT COUNT(*) AS total FROM {$tName}" . 
  196.  
  197.       ($condition=='' ? '' : ' WHERE ' . $condition); 
  198.  
  199.       $re = $this->_db->query($this->_sql); 
  200.  
  201.       foreach ($re as $v) { 
  202.  
  203.         $total = $v['total']; 
  204.  
  205.       } 
  206.  
  207.       return (int)$total
  208.  
  209.     } catch (PDOException $e) { 
  210.  
  211.       exit($e->getMessage()); 
  212.  
  213.     } 
  214.  
  215.   } 
  216.  
  217.   /** 
  218.  
  219.    * 数据库删除多条数据 
  220.  
  221.    * @param string $tName 表名 
  222.  
  223.    * @param string $field 依赖字段 
  224.  
  225.    * @param array $ids 删除数组 
  226.  
  227.    * @return int 受影响的行数 
  228.  
  229.    */ 
  230.  
  231.   public function delMulti($tName$field$ids) { 
  232.  
  233.     try { 
  234.  
  235.       if (!is_string($tName) || !is_array($ids)) 
  236.  
  237.         exit($this->getError(__FUNCTION____LINE__)); 
  238.  
  239.       $delStr = ''
  240.  
  241.       $tName = $this->formatTabName($tName); 
  242.  
  243.       $field = $this->formatTabName($field); 
  244.  
  245.       foreach ($ids as $v) { 
  246.  
  247.         $delStr .= $v . ','
  248.  
  249.       } 
  250.  
  251.       $delStr = rtrim($delStr','); 
  252.  
  253.       $this->_sql = "DELETE FROM {$tName} WHERE {$field} IN ({$delStr})"
  254.  
  255.       $row = $this->_db->exec($this->_sql); 
  256.  
  257.       return $row
  258.  
  259.     } catch (PDOException $e) { 
  260.  
  261.       exit($e->getMessage()); 
  262.  
  263.     } 
  264.  
  265.   } 
  266.  
  267.   /** 
  268.  
  269.    * 获取表格的最后主键(注:针对 INT 类型) 
  270.  
  271.    * @param string $tName 表名 
  272.  
  273.    * @return int 
  274.  
  275.    */ 
  276.  
  277.   public function insertId($tName) { 
  278.  
  279.     try { 
  280.  
  281.       if (!is_string($tName)) 
  282.  
  283.         exit($this->getError(__FUNCTION____LINE__)); 
  284.  
  285.       $this->_sql = "SHOW TABLE STATUS LIKE '{$tName}'"
  286.  
  287.       $result = $this->_db->query($this->_sql); 
  288.  
  289.       $insert_id = 0; 
  290.  
  291.       foreach ($result as $v) { 
  292.  
  293.         $insert_id = $v['Auto_increment']; 
  294.  
  295.       } 
  296.  
  297.       return (int)$insert_id
  298.  
  299.     } catch (PDOException $e) { 
  300.  
  301.       exit($e->getMessage()); 
  302.  
  303.     } 
  304.  
  305.   } 
  306.  
  307.   /** 
  308.  
  309.    * 检查数据是否已经存在(依赖条件) 
  310.  
  311.    * @param string $tName 表名 
  312.  
  313.    * @param string $field 依赖的字段 
  314.  
  315.    * @return bool 
  316.  
  317.    */ 
  318.  
  319.   public function exists($tName$condition) { 
  320.  
  321.     try { 
  322.  
  323.       if (!is_string($tName) || !is_string($condition)) 
  324.  
  325.         exit($this->getError(__FUNCTION____LINE__)); 
  326.  
  327.       $tName = $this->formatTabName($tName); 
  328.  
  329.       $this->_sql = "SELECT COUNT(*) AS total FROM {$tName} WHERE {$condition}"
  330.  
  331.       $result = $this->_db->query($this->_sql); 
  332.  
  333.       foreach ($result as $v) { 
  334.  
  335.          $b = $v['total']; 
  336.  
  337.       } 
  338.  
  339.       if ($b) { 
  340.  
  341.         return true; 
  342.  
  343.       } else { 
  344.  
  345.         return false; 
  346.  
  347.       } 
  348.  
  349.     } catch (PDOException $e) { 
  350.  
  351.       exit($e->getMessage()); 
  352.  
  353.     } 
  354.  
  355.   } 
  356.  
  357.   /** 
  358.  
  359.    * 检查数据是否已经存在(依赖 INT 主键) 
  360.  
  361.    * @param string $tName 表名 
  362.  
  363.    * @param string $primary 主键 
  364.  
  365.    * @param int $id 主键值 
  366.  
  367.    * @return bool 
  368.  
  369.    */ 
  370.  
  371.   public function existsByPK($tName$primary$id) { 
  372.  
  373.     try { 
  374.  
  375.       if (!is_string($tName) || !is_string($primary
  376.  
  377.       || !is_int($id)) 
  378.  
  379.         exit($this->getError(__FUNCTION____LINE__)); 
  380.  
  381.       $tName = $this->formatTabName($tName); 
  382.  
  383.       $this->_sql = "SELECT COUNT(*) AS total FROM {$tName} WHERE {$primary} = "$id
  384.  
  385.       $result = $this->_db->query($this->_sql); 
  386.  
  387.       foreach ($result as $v) { 
  388.  
  389.          $b = $v['total']; 
  390.  
  391.       } 
  392.  
  393.       if ($b) { 
  394.  
  395.         return true; 
  396.  
  397.       } else { 
  398.  
  399.         return false; 
  400.  
  401.       } 
  402.  
  403.     } catch (PDOException $e) { 
  404.  
  405.       exit($e->getMessage()); 
  406.  
  407.     } 
  408.  
  409.   } 
  410.  
  411.   /** 
  412.  
  413.    * 预处理删除(注:针对主键为 INT 类型,推荐使用) 
  414.  
  415.    * @param string $tName 表名 
  416.  
  417.    * @param string $primary 主键字段 
  418.  
  419.    * @param int or array or string $ids 如果是删除一条为 INT,多条为 array,删除一个范围为 string 
  420.  
  421.    * @return int 返回受影响的行数 
  422.  
  423.    */ 
  424.  
  425.   public function delByPK($tName$primary$ids$mult=FALSE) { 
  426.  
  427.     try { 
  428.  
  429.       if (!is_string($tName) || !is_string($primary
  430.  
  431.       || (!is_int($ids) && !is_array($ids) && !is_string($ids)) 
  432.  
  433.       || !is_bool($mult)) exit($this->getError(__FUNCTION____LINE__)); 
  434.  
  435.       $tName = $this->formatTabName($tName); 
  436.  
  437.       $stmt = $this->_db->prepare("DELETE FROM {$tName} WHERE {$primary}=?"); 
  438.  
  439.       if (!$mult) { 
  440.  
  441.         $stmt->bindParam(1, $ids); 
  442.  
  443.         $row = $stmt->execute(); 
  444.  
  445.       } else { 
  446.  
  447.         if (is_array($ids)) { 
  448.  
  449.           $row = 0; 
  450.  
  451.           foreach ($ids as $v) { 
  452.  
  453.             $stmt->bindParam(1, $v); 
  454.  
  455.             if ($stmt->execute()) { 
  456.  
  457.               $row++; 
  458.  
  459.             } 
  460.  
  461.           } 
  462.  
  463.         } elseif (is_string($ids)) { 
  464.  
  465.           if (!strpos($ids'-')) 
  466.  
  467.             exit($this->getError(__FUNCTION____LINE__)); 
  468.  
  469.           $split = explode('-'$ids); 
  470.  
  471.           if (count($split)!=2 || $split[0]>$split[1]) 
  472.  
  473.             exit($this->getError(__FUNCTION____LINE__)); 
  474.  
  475.           $i = null; 
  476.  
  477.           $count = $split[1]-$split[0]+1; 
  478.  
  479.           for ($i=0; $i<$count$i++) { 
  480.  
  481.             $idArr[$i] = $split[0]++; 
  482.  
  483.           } 
  484.  
  485.           $idStr = ''
  486.  
  487.           foreach ($idArr as $id) { 
  488.  
  489.             $idStr .= $id . ','
  490.  
  491.           } 
  492.  
  493.           $idStr = rtrim($idStr','); 
  494.  
  495.           $this->_sql ="DELETE FROM {$tName} WHERE {$primary} in ({$idStr})"
  496.  
  497.           $row = $this->_db->exec($this->_sql); 
  498.  
  499.         } 
  500.  
  501.       } 
  502.  
  503.       return $row
  504.  
  505.     } catch (PDOException $e) { 
  506.  
  507.       exit($e->getMessage()); 
  508.  
  509.     } 
  510.  
  511.   } 
  512.  
  513.   /** 
  514.  
  515.    * 返回单个字段数据或单条记录 
  516.  
  517.    * @param string $tName 表名 
  518.  
  519.    * @param string $condition 条件 
  520.  
  521.    * @param string or array $fields 返回的字段,默认是* 
  522.  
  523.    * @return string || array 
  524.  
  525.    */ 
  526.  
  527.   public function getRow($tName$condition=''$fields="*") { 
  528.  
  529.     try { 
  530.  
  531.       if (!is_string($tName) || !is_string($condition
  532.  
  533.       || !is_string($fields) || emptyempty($fields)) 
  534.  
  535.          exit($this->getError(__FUNCTION____LINE__)); 
  536.  
  537.       $tName = $this->formatTabName($tName); 
  538.  
  539.       $this->_sql = "SELECT {$fields} FROM {$tName} "
  540.  
  541.       $this->_sql .= ($condition=='' ? '' : "WHERE {$condition}") . " LIMIT 1"
  542.  
  543.       $sth = $this->_db->prepare($this->_sql); 
  544.  
  545.       $sth->execute(); 
  546.  
  547.       $result = $sth->fetch(PDO::FETCH_ASSOC); 
  548.  
  549.       if ($fields === '*') { 
  550.  
  551.         return $result
  552.  
  553.       } else { 
  554.  
  555.         return $result[$fields]; 
  556.  
  557.       } 
  558.  
  559.     } catch (PDOException $e) { 
  560.  
  561.       exit($e->getMessage()); 
  562.  
  563.     } 
  564.  
  565.   } 
  566.  
  567.   /** 
  568.  
  569.    * 返回多条数据 
  570.  
  571.    * @param string $tName 表名 
  572.  
  573.    * @param string $fields 返回字段,默认为* 
  574.  
  575.    * @param string $condition 条件 
  576.  
  577.    * @param string $order 排序 
  578.  
  579.    * @param string $limit 显示个数 
  580.  
  581.    * @return PDOStatement 
  582.  
  583.    */ 
  584.  
  585.   public function getAll($tName$fields='*'$condition=''$order=''$limit='') { 
  586.  
  587.     try { 
  588.  
  589.       if (!is_string($tName) || !is_string($fields
  590.  
  591.       || !is_string($condition) || !is_string($order
  592.  
  593.       || !is_string($limit)) 
  594.  
  595.         exit($this->getError(__FUNCTION____LINE__)); 
  596.  
  597.       $tName = $this->formatTabName($tName); 
  598.  
  599.       $fields = ($fields=='*' || $fields=='') ? '*' : $fields
  600.  
  601.       $condition = $condition=='' ? '' : " WHERE "$condition ; 
  602.  
  603.       $order = $order=='' ? '' : " ORDER BY "$order
  604.  
  605.       $limit = $limit=='' ? '' : " LIMIT "$limit
  606.  
  607.       $this->_sql = "SELECT {$fields} FROM {$tName} {$condition} {$order} {$limit}"
  608.  
  609.       $sth = $this->_db->prepare($this->_sql); 
  610.  
  611.       $sth->execute(); 
  612.  
  613.       $result = $sth->fetchAll(PDO::FETCH_ASSOC); 
  614.  
  615.       return $result
  616.  
  617.     } catch (PDOException $e) { 
  618.  
  619.       exit($e->getMessage()); 
  620.  
  621.     } 
  622.  
  623.   } 
  624.  
  625.   /** 
  626.  
  627.    * 格式化数组(表结构和值) 
  628.  
  629.    * @param array $field 
  630.  
  631.    * @param bool $isField 
  632.  
  633.    * @return string 
  634.  
  635.    */ 
  636.  
  637.   private function formatArr($field$isField=TRUE) { 
  638.  
  639.     if (!is_array($field)) exit($this->getError(__FUNCTION____LINE__)); 
  640.  
  641.     $fields = ''
  642.  
  643.     if ($isField) { 
  644.  
  645.       foreach ($field as $v) { 
  646.  
  647.         $fields .= '`'.$v.'`,'
  648.  
  649.       } 
  650.  
  651.     } else { 
  652.  
  653.       foreach ($field as $v) { 
  654.  
  655.         $fields .= '\''.$v.'\''.','
  656.  
  657.       } 
  658.  
  659.     } 
  660.  
  661.     $fields = rtrim($fields','); 
  662.  
  663.     return $fields
  664.  
  665.   } 
  666.  
  667.   /** 
  668.  
  669.    * 格式化问号 
  670.  
  671.    * @param int $count 数量 
  672.  
  673.    * @return string 返回格式化后的字符串 
  674.  
  675.    */ 
  676.  
  677.   private function formatMark($count) { 
  678.  
  679.     $str = ''
  680.  
  681.     if (!is_int($count)) exit($this->getError(__FUNCTION____LINE__)); 
  682.  
  683.     if ($count==1) return '?'
  684.  
  685.     for ($i=0; $i<$count$i++) { 
  686.  
  687.       $str .= '?,'
  688.  
  689.     } 
  690.  
  691.     return rtrim($str','); 
  692.  
  693.   } 
  694.  
  695.   /** 
  696.  
  697.    * 错误提示 
  698.  
  699.    * @param string $fun 
  700.  
  701.    * @return string 
  702.  
  703.    */ 
  704.  
  705.   private function getError($fun$line) { 
  706.  
  707.     return __CLASS__ . '->' . $fun . '() line<font color="red">'$line .'</font> ERROR!'
  708.  
  709.   } 
  710.  
  711.   /** 
  712.  
  713.    * 处理表名 
  714.  
  715.    * @param string $tName 
  716.  
  717.    * @return string 
  718.  
  719.    */ 
  720.  
  721.   private function formatTabName($tName) { 
  722.  
  723.     return '`' . trim($tName'`') . '`'
  724.  
  725.   } 
  726.  
  727.   /** 
  728.  
  729.    * 析构方法 
  730.  
  731.    */ 
  732.  
  733.   public function __destruct() { 
  734. //phpfensi.com 
  735.     $this->_db = null; 
  736.  
  737.   } 
  738.  

Tags: PDO常用类库

分享到: