zoukankan      html  css  js  c++  java
  • php操作mysql与sqlite类

    源博客上的类,有些小问题(表前缀只对mysql进行了处理,sqlite的没有处理),下面的这个是我做过一些处理之后的类,我也测试过了,可以使用。感兴趣的朋友也可以继续扩展下。 

    Php代码 
      1. <?php  
      2. /** 
      3.  * 文件描述  PDO数据库操作类 
      4.  * ================================================================= 
      5.  * 作    者  YYT<gyyst@126.com> 
      6.  * ================================================================= 
      7.  */  
      8.   
      9. class db  
      10. {  
      11.     private $config;  
      12.   
      13.     private $db;  
      14.   
      15.     public $querynum;  
      16.   
      17.     public function mysql($host$user$password$dbname$tablepre = ''$charset = 'GBK')  
      18.     {  
      19.         $this->config['type'] = 'mysql';  
      20.         $this->config['tablepre'] = $tablepre;  
      21.         $this->config['mysql']['host'] = $host;  
      22.         $this->config['mysql']['user'] = $user;  
      23.         $this->config['mysql']['password'] = $password;  
      24.         $this->config['mysql']['dbname'] = $dbname;  
      25.         $this->config['mysql']['charset'] = $charset;  
      26.     }  
      27.   
      28.     public function sqlite($datafile,$tablepre = '')  
      29.     {  
      30.         $this->config['type'] = 'sqlite';  
      31.         $this->config['sqlite']['file'] = $datafile;  
      32.                 $this->config['tablepre'] = $tablepre;  
      33.     }  
      34.   
      35.     private function connect()  
      36.     {  
      37.         if (isset($this->db)) {  
      38.             return true;  
      39.         }  
      40.         if ($this->config['type'] == 'mysql') {  
      41.             try{  
      42.                 $this->db = new PDO('mysql:host='.$this->config['mysql']['host'].';dbname='.$this->config['mysql']['dbname'], $this->config['mysql']['user'], $this->config['mysql']['password'], array(PDO::ATTR_PERSISTENT => true));  
      43.                 $this->db->query('SET NAMES '.$this->config['mysql']['charset']);  
      44.             } catch (PDOException $e) {  
      45.                 exit('数据库连接失败:'.$e->getMessage());  
      46.             }  
      47.         }  
      48.         if ($this->config['type'] == 'sqlite') {  
      49.             !file_exists($this->config['sqlite']['file']) && exit('没有找到SQLITE数据库');  
      50.             $this->db = new PDO('sqlite:'.$this->config['sqlite']['file']);  
      51.         }  
      52.         !isset($this->db) && exit('不支持该数据库类型 '.$this->config['type']);  
      53.     }  
      54.   
      55.     public function table($table)  
      56.     {  
      57.         return '`'.$this->config['tablepre'].$table.'`';       
      58.     }  
      59.   
      60.     public function strescape($str)  
      61.     {  
      62.         if ($this->config['type'] === 'mysql') {  
      63.             return !get_magic_quotes_gpc() ? addslashes($str) : $str;  
      64.         }  
      65.         if ($this->config['type'] === 'sqlite') {  
      66.             return str_replace('\'''\'\''$str);  
      67.         }  
      68.         return $str;  
      69.     }  
      70.   
      71.     public function format_condition($condition)  
      72.     {  
      73.         if (is_array($condition)) {  
      74.             foreach ($condition as $key => $value) {  
      75.                 $join[] = $key.' = \''.$this->strescape($value).'\'';  
      76.             }  
      77.             return ' WHERE '.join(' AND '$join);  
      78.         }  
      79.         return $condition ? ' WHERE '.$condition : '';  
      80.     }  
      81.   
      82.     private function error()  
      83.     {  
      84.         if ($this->db->errorCode() != '00000') {  
      85.             $error = $this->db->errorInfo();  
      86.             exit('SQL语句错误:'.$error['2']);  
      87.         }  
      88.     }  
      89.   
      90.     public function query($sql)  
      91.     {  
      92.         $this->connect();  
      93.         $result = $this->db->query($sql);  
      94.         $this->error();  
      95.         $result->setFetchMode(PDO::FETCH_ASSOC);  
      96.         $this->querynum++;  
      97.         return $result;  
      98.     }  
      99.   
      100.     public function exec($sql)  
      101.     {  
      102.         $this->connect();  
      103.         $result = $this->db->exec($sql);  
      104.         $this->error();  
      105.         $this->querynum++;  
      106.         return $result;  
      107.     }  
      108.   
      109.     public function lastinsertid()  
      110.     {  
      111.         return $this->db->lastInsertId();  
      112.     }  
      113.   
      114.     public function fetchall($table$field$condition = ''$sort = ''$limit = '')  
      115.     {  
      116.         $condition = $this->format_condition($condition);  
      117.         $sort && $sort = ' ORDER BY '.$sort;  
      118.         $limit && $limit = ' LIMIT '.$limit;  
      119.         $sql = 'SELECT '.$field.' FROM '.$this->table($table).$condition.$sort.$limit;  
      120.         return $this->query($sql)->fetchall();  
      121.     }  
      122.   
      123.     public function fetch($table$field$condition = ''$sort = '')  
      124.     {  
      125.         $condition = $this->format_condition($condition);  
      126.         $sort && $sort = ' ORDER BY '.$sort;  
      127.         $sql = 'SELECT '.$field.' FROM '.$this->table($table).$condition.$sort.' LIMIT 1';  
      128.         return $this->query($sql)->fetch();  
      129.     }  
      130.   
      131.     public function rowcount($table$condition = '')  
      132.     {  
      133.         $condition = $this->format_condition($condition);  
      134.         $sql = 'SELECT COUNT(*) FROM '.$this->table($table).$condition;  
      135.         $result = $this->query($sql)->fetch();  
      136.         return $result['COUNT(*)'];  
      137.     }  
      138.   
      139.     public function get_fields($table)  
      140.     {  
      141.         if ($this->config['type'] == 'mysql') {  
      142.             $sql = 'DESCRIBE '.$this->table($table);  
      143.             $key = 'Field';  
      144.         } else if ($this->config['type'] == 'sqlite') {  
      145.             $sql = 'PRAGMA table_info('.$this->table($table).')';  
      146.             $key = 'name';  
      147.         }  
      148.         $fields = $this->query($sql)->fetchall();  
      149.         foreach ($fields as $value) {  
      150.             $result[] = $value[$key];  
      151.         }  
      152.         return $result;  
      153.     }  
      154.   
      155.     public function insert($table$array)  
      156.     {  
      157.         if (!is_array($array)) {  
      158.             return false;  
      159.         }  
      160.         foreach ($array as $key => $value) {  
      161.             $cols[] = $key;  
      162.             $vals[] = '\''.$this->strescape($value).'\'';  
      163.         }  
      164.         $col = join(','$cols);  
      165.         $val = join(','$vals);  
      166.         $sql = 'INSERT INTO '.$this->table($table).' ('.$col.') VALUES ('.$val.')';  
      167.         return $this->exec($sql);  
      168.     }  
      169.   
      170.     public function update($table$array$condition)  
      171.     {  
      172.         if (!is_array($array)) {  
      173.             return false;  
      174.         }  
      175.         $condition = $this->format_condition($condition);  
      176.         foreach ($array as $key => $value) {  
      177.             $vals[] = $key.' = \''.$this->strescape($value).'\'';  
      178.         }  
      179.         $values = join(','$vals);  
      180.         $sql = 'UPDATE '.$this->table($table).' SET '.$values.$condition;  
      181.         return $this->exec($sql);  
      182.     }  
      183.   
      184.     public function delete($table$condition)  
      185.     {  
      186.         $condition = $this->format_condition($condition);  
      187.         $sql = 'DELETE FROM '.$this->table($table).$condition;  
      188.         return $this->exec($sql);  
      189.     }  
      190. }  
      191.   
      192. //例子  
      193. $db = new db();  
      194. //配置数据库,2选一  
      195. //$db->mysql($host, $user, $password, $dbname, '表前缀', 'GBK');  
      196. $db->sqlite('d:\Backup\test2.db');  
      197.   
      198. //SQL语句查询  
      199. $db->query('SELECT * FROM 表')->fetch();//或者fetchall();  
      200.   
      201. //执行一条无返回结果的SQL语句,如插入数据  
      202. $db->exec($sql);  
      203.   
      204. //返回最后插入的数据主键  
      205. echo $db->lastinsertid();  
      206.   
      207. /***** 下面的操作如果条件为数组则不需要字符转义 *****/  
      208.   
      209. //查询一条数据  
      210. $db->fetch('表''字段1,字段2''条件,可用数组,如:array(id => 1)''id DESC');  
      211.   
      212. //查询所有数据  
      213. $db->fetchall('表''字段1,字段2''条件,可用数组''id DESC''显示条数');  
      214.   
      215. //插入一条数据  
      216. $db->insert('test'array('username' => 'lxx''password' => 'lxx'));  
      217.   
      218. //更新一条数据  
      219. $db->update('表'array('字段' => '值''字段2' => '值'), array('id' => '1 更新ID为1的数据'));  
      220.   
      221. //删除一条数据  
      222. $db->delete('test'array('username' => 'lxx'));  
  • 相关阅读:
    hdu 1005(找循环节)
    hdu 1452(因子和+逆元)
    hdu 1215(因子和)
    hdu 1492(约数的个数)
    hdu 2136(质数筛选+整数分解)
    HDU 1286 找新朋友
    HDU 2136 Largest prime factor
    HDU 1722 Cake
    HDU 1713 相遇周期
    HDU 2138 How many prime numbers
  • 原文地址:https://www.cnblogs.com/tanshupeng/p/3024441.html
Copyright © 2011-2022 走看看