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'));  
posted @ 2013-04-16 18:12  Bruce.Tan  阅读(317)  评论(0编辑  收藏  举报