幸好我是程序猿 发表于 2012-10-23 22:52:37

全新的PDO数据库操作类(仅适用Mysql)

  1年前,也差不多刚开博那会,分享过一个pdo的数据库操作类(可参见:http://www.cnblogs.com/hooray/archive/2011/06/30/2094743.html),与其说是类,其实就只是几个封装好的函数,整体略显稚嫩,但也是这么个东西,在公司里也用了1年之久。如今公司规模变大了,产品也日益完善,曾经的那个数据库操作函数虽说使用上没出什么大问题,但为了更显专业,花了1天时间重写了这个,现在,它确实是个类了。
/** * 作者:胡睿 * 日期: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;}}}}
页: [1]
查看完整版本: 全新的PDO数据库操作类(仅适用Mysql)