/**  * 作者:胡睿  * 日期:2012/07/21  * 电邮:hooray0905@foxmail.com  */    class HRDB{     protected $pdo;     protected $res;     protected $config;           /*构造函数*/     function __construct($config){         $this->Config = $config;         $this->connect();     }           /*数据库连接*/     public function connect(){         $this->pdo = new PDO($this->Config['dsn'], $this->Config['name'], $this->Config['password']);         $this->pdo->query('set names utf8;');         //把结果序列化成stdClass         //$this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);         //自己写代码捕获Exception         $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);     }           /*数据库关闭*/     public function close(){         $this->pdo = null;     }           public function query($sql){         $res = $this->pdo->query($sql);         if($res){             $this->res = $res;         }     }     public function exec($sql){         $res = $this->pdo->exec($sql);         if($res){             $this->res = $res;         }     }     public function fetchAll(){         return $this->res->fetchAll();     }     public function fetch(){         return $this->res->fetch();     }     public function fetchColumn(){         return $this->res->fetchColumn();     }     public function lastInsertId(){         return $this->res->lastInsertId();     }           /**      * 参数说明      * int              $debug      是否开启调试,开启则输出sql语句      *                              0   不开启      *                              1   开启      *                              2   开启并终止程序      * int              $mode       返回类型      *                              0   返回多条记录      *                              1   返回单条记录      *                              2   返回行数      * string/array     $table      数据库表,两种传值模式      *                              普通模式:      *                              'tb_member, tb_money'      *                              数组模式:      *                              array('tb_member', 'tb_money')      * string/array     $fields     需要查询的数据库字段,允许为空,默认为查找全部,两种传值模式      *                              普通模式:      *                              'username, password'      *                              数组模式:      *                              array('username', 'password')      * string/array     $sqlwhere   查询条件,允许为空,两种传值模式      *                              普通模式:      *                              'and type = 1 and username like "%os%"'      *                              数组模式:      *                              array('type = 1', 'username like "%os%"')      * string           $orderby    排序,默认为id倒序      */     public function select($debug, $mode, $table, $fields="*", $sqlwhere="", $orderby="tbid desc"){         //参数处理         if(is_array($table)){             $table = implode(', ', $table);         }         if(is_array($fields)){             $fields = implode(', ', $fields);         }         if(is_array($sqlwhere)){             $sqlwhere = ' and '.implode(' and ', $sqlwhere);         }         //数据库操作         if($debug === 0){             if($mode === 2){                 $this->query("select count(tbid) from $table where 1=1 $sqlwhere");                 $return = $this->fetchColumn();             }else if($mode === 1){                 $this->query("select $fields from $table where 1=1 $sqlwhere order by $orderby");                 $return = $this->fetch();             }else{                 $this->query("select $fields from $table where 1=1 $sqlwhere order by $orderby");                 $return = $this->fetchAll();             }             return $return;         }else{             if($mode === 2){                 echo "select count(tbid) from $table where 1=1 $sqlwhere";             }else if($mode === 1){                 echo "select $fields from $table where 1=1 $sqlwhere order by $orderby";             }             else{                 echo "select $fields from $table where 1=1 $sqlwhere order by $orderby";             }             if($debug === 2){                 exit;             }         }     }           /**      * 参数说明      * int              $debug      是否开启调试,开启则输出sql语句      *                              0   不开启      *                              1   开启      *                              2   开启并终止程序      * int              $mode       返回类型      *                              0   无返回信息      *                              1   返回执行条目数      *                              2   返回最后一次插入记录的id      * string/array     $table      数据库表,两种传值模式      *                              普通模式:      *                              'tb_member, tb_money'      *                              数组模式:      *                              array('tb_member', 'tb_money')      * string/array     $set        需要插入的字段及内容,两种传值模式      *                              普通模式:      *                              'username = "test", type = 1, dt = now()'      *                              数组模式:      *                              array('username = "test"', 'type = 1', 'dt = now()')      */     public function insert($debug, $mode, $table, $set){         //参数处理         if(is_array($table)){             $table = implode(', ', $table);         }         if(is_array($set)){             $set = implode(', ', $set);         }         //数据库操作         if($debug === 0){             if($mode === 2){                 $this->query("insert into $table set $set");                 $return = $this->lastInsertId();             }else if($mode === 1){                 $this->exec("insert into $table set $set");                 $return = $this->res;             }else{                 $this->query("insert into $table set $set");                 $return = NULL;             }             return $return;         }else{             echo "insert into $table set $set";             if($debug === 2){                 exit;             }         }     }           /**      * 参数说明      * int              $debug      是否开启调试,开启则输出sql语句      *                              0   不开启      *                              1   开启      *                              2   开启并终止程序      * int              $mode       返回类型      *                              0   无返回信息      *                              1   返回执行条目数      * string           $table      数据库表,两种传值模式      *                              普通模式:      *                              'tb_member, tb_money'      *                              数组模式:      *                              array('tb_member', 'tb_money')      * string/array     $set        需要更新的字段及内容,两种传值模式      *                              普通模式:      *                              'username = "test", type = 1, dt = now()'      *                              数组模式:      *                              array('username = "test"', 'type = 1', 'dt = now()')      * string/array     $sqlwhere   修改条件,允许为空,两种传值模式      *                              普通模式:      *                              'and type = 1 and username like "%os%"'      *                              数组模式:      *                              array('type = 1', 'username like "%os%"')      */     public function update($debug, $mode, $table, $set, $sqlwhere=""){         //参数处理         if(is_array($table)){             $table = implode(', ', $table);         }         if(is_array($set)){             $set = implode(', ', $set);         }         if(is_array($sqlwhere)){             $sqlwhere = ' and '.implode(' and ', $sqlwhere);         }         //数据库操作         if($debug === 0){             if($mode === 1){                 $this->exec("update $table set $set where 1=1 $sqlwhere");                 $return = $this->res;             }else{                 $this->query("update $table set $set where 1=1 $sqlwhere");                 $return = NULL;             }             return $return;         }else{             echo "update $table set $set where 1=1 $sqlwhere";             if($debug === 2){                 exit;             }         }     }           /**      * 参数说明      * int              $debug      是否开启调试,开启则输出sql语句      *                              0   不开启      *                              1   开启      *                              2   开启并终止程序      * int              $mode       返回类型      *                              0   无返回信息      *                              1   返回执行条目数      * string           $table      数据库表      * string/array     $sqlwhere   删除条件,允许为空,两种传值模式      *                              普通模式:      *                              'and type = 1 and username like "%os%"'      *                              数组模式:      *                              array('type = 1', 'username like "%os%"')      */     public function delete($debug, $mode, $table, $sqlwhere=""){         //参数处理         if(is_array($sqlwhere)){             $sqlwhere = ' and '.implode(' and ', $sqlwhere);         }         //数据库操作         if($debug === 0){             if($mode === 1){                 $this->exec("delete from $table where 1=1 $sqlwhere");                 $return = $this->res;             }else{                 $this->query("delete from $table where 1=1 $sqlwhere");                 $return = NULL;             }             return $return;         }else{             echo "delete from $table where 1=1 $sqlwhere";             if($debug === 2){                 exit;             }         }     } }