日期:2014-05-16 浏览次数:20938 次
<?php
/**
* 文件描述 PDO数据库操作类
* =================================================================
* 作 者 YYT<gyyst@126.com>
* =================================================================
*/
class db
{
private $config;
private $db;
public $querynum;
public function mysql($host, $user, $password, $dbname, $tablepre = '', $charset = 'GBK')
{
$this->config['type'] = 'mysql';
$this->config['tablepre'] = $tablepre;
$this->config['mysql']['host'] = $host;
$this->config['mysql']['user'] = $user;
$this->config['mysql']['password'] = $password;
$this->config['mysql']['dbname'] = $dbname;
$this->config['mysql']['charset'] = $charset;
}
public function sqlite($datafile,$tablepre = '')
{
$this->config['type'] = 'sqlite';
$this->config['sqlite']['file'] = $datafile;
$this->config['tablepre'] = $tablepre;
}
private function connect()
{
if (isset($this->db)) {
return true;
}
if ($this->config['type'] == 'mysql') {
try{
$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));
$this->db->query('SET NAMES '.$this->config['mysql']['charset']);
} catch (PDOException $e) {
exit('数据库连接失败:'.$e->getMessage());
}
}
if ($this->config['type'] == 'sqlite') {
!file_exists($this->config['sqlite']['file']) && exit('没有找到SQLITE数据库');
$this->db = new PDO('sqlite:'.$this->config['sqlite']['file']);
}
!isset($this->db) && exit('不支持该数据库类型 '.$this->config['type']);
}
public function table($table)
{
return '`'.$this->config['tablepre'].$table.'`';
}
public function strescape($str)
{
if ($this->config['type'] === 'mysql') {
return !get_magic_quotes_gpc() ? addslashes($str) : $str;
}
if ($this->config['type'] === 'sqlite') {
return str_replace('\'', '\'\'', $str);
}
return $str;
}
public function format_condition($condition)
{
if (is_array($condition)) {
foreach ($condition as $key => $value) {
$join[] = $key.' = \''.$this->strescape($value).'\'';
}
return ' WHERE '.join(' AND ', $join);
}
return $condition ? ' WHERE '.$condition : '';
}
private function error()
{
if ($this->db->errorCode() != '00000') {
$error = $this->db->errorInfo();
exit('SQL语句错误:'.$error['2']);
}
}
public function query($sql)
{
$this->connect();
$result = $this->db->query($sql);
$this->error();
$result->setFetchMode(PDO::FETCH_ASSOC);
$this->querynum++;
return $result;
}
public function exec($sql)
{
$this->connect();
$result = $this->db->exec($sql);
$this->error();
$this->querynum++;
return $result;
}
public function lastinsertid()
{
return $this->db->lastInsertId();
}
public function fetchall($table, $field, $condition = '', $sort = '', $limit = '')
{
$condition = $this->format_condition($condition);
$sort && $sort = ' ORDER BY '.$sort;
$limit && $limit = ' LIMIT '.$limit;
$sql = 'SELECT '.$field.' FROM '.$this->table($table).$condition.$sort.$limit;
return $this->query($sql)->fetchall();
}
public function fetch($table, $field, $condition = '', $sort = '')
{
$condition = $this->format_condition($condition);
$sort && $sort = ' ORDER BY '.$sort;
$sql = 'SELECT '.$field.' FROM '.$this->table($table).$condition.$sort.' LIMIT 1';
return $this->query($sql)->fetch();
}
public function rowcount($table, $condition = '')
{
$condition = $this->format_condition($condition);
$sql = 'SELECT CO