mysql db类_一个DB类,MYSQL

<?php //$conn = DB::instance(array('dbname'=>'default')); class ConnDB{     /*      * Author 吴啸      * Create 2011-7-1      * Description 数据库类      *      * Methods      * ::config(array $config)      *      * ->select_db(string $dbname)      * ->set_charset(string $charset)      *      * ->query(string $sql,boolean $to_array = true,int $result_type = MYSQL_ASSOC)      * ->fetch_array(resource $result,int $result_type = MYSQL_BOTH)      *      * ->num_rows(mixed $request)      * ->insert_id()      *      * ->last_sqls(int $num = 1)      * ->error(int $num = 1)      * ->last_errors(int $num = 1)      * ->last_query()      *      * Example      * $conndb = DB::instance();      * 或者      * $conndb = DB::instance(array(      *     'host' => 'localhost',      *     'dbname' => 'default',      *     'username' => 'root',      *     'password' => '',      *     'charset' => 'utf8'      * ));      *      * */          private static $_config = array(     //主机地址         'host' => 'localhost',     //数据库名         'dbname' => 'default',     //用户名         'username' => 'root',     //密码         'password' => '',     //字符集         'charset' => 'utf8'     );          //是否保存查询错误信息     private $_save_errors = 1;          //查询错误信息寄存条目上限     private $_errors_amount = 5;          //查询错误信息寄存器     private $_errors = array();          //查询语句寄存条目上限     private $_ok_sqls_amount = 5;          //查询语句寄存器     private $_ok_sqls = array();          //最近一条查询语句     private $_last_sql;          //类实体寄存器     private static $_instance;          //数据库实体寄存器     private $_conn;          function __construct(){         //根据给定参数建立数据库连接         $this->_conn = mysql_connect(             self::$_config['host'],             self::$_config['username'],             self::$_config['password'],             true         );     }          public static function instance(array $arr_config = array()){         if (count(array_filter($arr_config))){             self::config($arr_config);         }         if ( 0 < func_num_args() && false != ( $arr_config = func_get_arg(0)) ){             self::config($arr_config);         }         //数据库对象实例化         self::$_instance = new self;         if (!self::$_instance->select_db(self::$_config['dbname'])){             echo 'select conndb:',self::$_config['dbname'],' error.';         }         self::$_instance->set_charset(self::$_config['charset']);         return self::$_instance;     }          //传递设置参数     public static function config(array $arr_config){         if ( 0 != count( $intersect = array_intersect_key( $arr_config,self::$_config ) ) ){             self::$_config = array_merge(self::$_config,$intersect);         }     }          //数据库选择     public function select_db($str_db){         return mysql_select_db($str_db,$this->_conn);     }          //设定字符集     public function set_charset($str_charset){         return mysql_set_charset($str_charset,$this->_conn);     }          /*      * 数据库查询      * @param        sql string        待查询的SQL语句      * @param        to_array bool    是否将结果集转换成数组后再返回      * @parame        result_type int    返回的结果集类型,同mysql_fetch_array的结果集类型参数      * @return mysql结果集/或者/结果集转换成的数组      * @exception return false      * */     public function query($sql,$result_type = MYSQL_BOTH,$to_array = true){         return $this->sqlInspecte($sql,$result_type,$to_array,1);     }          //无缓存查询     public function unbuffered_query($sql,$result_type = MYSQL_BOTH,$to_array = true){         return $this->sqlInspecte($sql,$result_type,$to_array,0);     }          //sql分句隔断     private function sqlInspecte($sql,$result_type,$to_array,$query_method){         $sqls = trim($sql,';');         //分句隔断点正则表达         $preg = '/;(?=insert|delete|update|select|alter)/i';         if (!preg_match($preg,$sqls)){             return $this->querySql($sqls,$result_type,$to_array,$query_method);         }else{             $sqls = preg_split($preg,$sqls);             foreach ($sqls as $sqls_v){                 $result = $this->querySql($sqls_v,$result_type,$to_array,$query_method);                 if ((false === $result) || is_array($result) || is_resource($result)){                     return $result;                 }             }             return true;         }     }          //主查询方法     private function querySql($sql,$result_type = MYSQL_BOTH,$to_array = true,$query_method = 1){         //存储最近一条查询语句         self::$_instance->_last_sql = $sql;                  if ($query_method){             $result = mysql_query($sql,$this->_conn);         }else{             $result = mysql_unbuffered_query($sql,$this->_conn);         }                  //query succeed         if (false != $result){             //存储最近一条成功的查询语句             array_unshift(self::$_instance->_ok_sqls,$sql);             if (self::$_instance->_ok_sqls_amount < count(self::$_instance->_ok_sqls)){                 array_pop(self::$_instance->_ok_sqls);             }                          //返回查询结果集             return (!is_resource($result) || !$to_array)?$result:self::$_instance->fetch_array($result,$result_type);         }                  //query failed         if (self::$_instance->_save_errors){             //存储最近一条查询失败的错误信息             array_unshift(self::$_instance->_errors,$sql."::ERROR::".mysql_error());             if (self::$_instance->_errors_amount < count(self::$_instance->_errors)){                 array_pop(self::$_instance->_errors);             }         }                  return false;     }          //获得最后一条查询语句     public function last_query(){         return self::$_instance->_last_sql;     }          //结果集转成数组     public function fetch_array($result,$result_type = MYSQL_BOTH){         $array = array();         while ($temp = mysql_fetch_array($result,$result_type)){             $array[] = $temp;         }                  return $array;     }          //获取结果集行数     public function num_rows($request){         //如果是结果集         if (is_resource($request)){             return mysql_num_rows($request);         }         //如果是查询语句字符串         if (is_string($request)){             return mysql_num_rows(self::$_instance->query($request,MYSQL_NUM,false));         }         //如果是结果集转换后的数组         if (is_array($request)){             return count($request);         }                  return false;     }          //获取最近的成功的查询语句,参数$num为从1到保存上限的integer     public function last_ok_sql($num = 1){         if (--$num <= self::$_instance->_ok_sqls_amount){             return !empty(self::$_instance->_ok_sqls[$num])?self::$_instance->_ok_sqls[$num]:'尚未有成功的查询';         }else{             return '错误的下标';         }     }          //获取所有最近的成功的查询语句,return array     public function last_ok_sqls(){         if (!empty(self::$_instance->_ok_sqls)){             return self::$_instance->_ok_sqls;         }else{             return '尚未有成功的查询';         }     }          //获取最近的查询失败信息,参数$num为从1到保存上限的integer     public function error($num = 1){         if (--$num <= self::$_instance->_errors_amount){             return !empty(self::$_instance->_errors[$num])?self::$_instance->_errors[$num]:'暂无错误信息';         }else{             return '错误的下标';         }     }          //获取所有最近的查询失败信息     public function last_errors(){         if (!empty(self::$_instance->_errors)){             return self::$_instance->_errors;         }else{             return '暂无错误信息';         }     }          //获取最后插入的行的id     public function insert_id(){         return mysql_insert_id($this->_conn);     }          public function close(){         self::$_instance = '';     }          function __destruct(){         if (is_resource($this->_conn)){             mysql_close($this->_conn);         }     } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值