A-A+
PHP Mysql数据库操作类
PHP Mysql的一个数据库操作类,这个数据库操作类包括三层。底层定义了直接对数据库操作的方法;中间层定义了基类;外层定义了具体的操作对象,不管是对数据库的操作方法,还是对数据库的直接操作,相对于其它PHP Mysql 数据库的操作类来说,要完善一些,这里主要针对的就是新手PHP用户。
如果要将这个 Mysql 数据库的操作类放到高级PHP应用里,显得并不是很完善,作为基础的PHP Mysql数据库操作类,应用在一般的网站上面已经足够了,作为新手,不仅要学习数据库连接在 php 面向对象中的应用,而且增删改查等简单的 mysql 数据库的操作也要重点掌握。
<?php /** * 数据库操作基类 * * @author Hai */ class db { protected $db_server = 'localhost'; //数据库名 protected $db_user = 'root'; //数据库登陆账号 protected $db_password = 'root'; //密码 protected $db_name = 'test'; //数据库名称 protected $conn = ''; //链接标示 protected $result = ''; //执行的结果 protected $rows_num = ''; //返回的记录总数 protected $rows_array = array(); //返回的记录 function __construct( $db_server='',$db_user='',$db_password ='',$db_name='' ) { //初始化参数 if(!emptyempty($db_server)) $this->db_server = $db_server; if(!emptyempty($db_user)) $this->db_user = $db_user; if(!emptyempty($db_password))$this->db_password = $db_password; if(!emptyempty($db_name)) $this->db_name = $db_name; $this->connect_db($this->db_server,$this->db_user,$this->d b_password,$this->db_name); } function connect_db( $db_server,$db_user,$db_password,$db_name ) { //链接数据库 $this->conn = mysql_connect($this->db_server,$this->db_user,$th is->db_password); if(!$this->conn) { exit("数据库连接异常 错误信息:line ".__LINE__." IN ".__FILE__ ."<br/>".mysql_error()); } else { if(!mysql_select_db($this->db_name,$this->conn)) { exit("不能打开指定的数据库'{$this->db_name}',请确定数据库是 否存在。错误信息:line ".__LINE__." IN ".__FILE__."<br/>".mysql_error()); } mysql_query("set names gbk"); } return $this->conn; } function query($sql) { //执行sql if(emptyempty($sql)) exit("SQL语句不能为空! 请更正后重试.错误信息:l ine ".__LINE__." IN ".__FILE__."<br/>".mysql_error()); $start_time = microtime_float(); $this->result = mysql_query($sql,$this->conn); if( $this->result ){ $end_time = microtime_float(); $cost_time = $end_time - $start_time; global $_GET; $_debug = $_GET['_debug']; if($_debug)trace($sql,$cost_time,$this->db_server); return $this->result; } else{ exit("sql语法错误,错误信息:line ".__LINE__." IN ".__FILE__."<b r/>".mysql_error()."<br/>"."SQL:".$sql); } } function fetch_one_array($sql) { //获取单条记录 $this->query($sql); Return mysql_fetch_array($this->result,MYSQL_ASSOC); } function fetch_array($sql) { //获取多条记录 $this->rows_array = ''; $this->query($sql); while($rs=mysql_fetch_array($this->result,MYSQL_ASSOC)) $this->r ows_array[]=$rs; Return $this->rows_array; } function udiquery($sql){ //sql添加、更新、删除操作 $this->query($sql); $this->rows_num = mysql_affected_rows(); if(mysql_errno() == 0)return $this->rows_num; else return ''; } function get_insert_id() { //返回新增的自增ID return mysql_insert_id(); } function numrows($sql) { //返回总记录数 $this->query($sql); Return mysql_num_rows($this->result); } function closerst() { //清空记录集 $this->rows_array=''; mysql_free_result($this->result); } function closedb() { //关闭链接 $this->closerst; mysql_close($this->conn); } } ?> <?php /** * 数据库操作基类 * * @author Hai */ class db_base extends db{ /** * 取数据列表操作 * @access public * @param bool $b_select_count true:返回总记录数 false:返回数据数组 * @param string $sql sql语句 * @param string $limit limit记录数 * @param string $order_by 排序条件 * @return array */ public function get_table_list($where_str='', $limit = "0,10", $orde r_by = "",$b_select_count=false,$field='*',$group_by='') { $sql = "Select {$field} FROM {$this->db_name}.{$this->tbl_name}"; if( $where_str ) $sql .= " Where {$where_str}"; if ($b_select_count) { $count_sql = preg_replace('|Select(.*)FROM|i','Select COUNT(* ) AS count FROM', $sql); $tmp = $this->fetch_one_array($count_sql); return $tmp["count"]*1; } if( $group_by ) $sql .= " GROUP BY {$group_by}"; if ($order_by) { check_order_by($order_by); $sql .= " ORDER BY ".$order_by; } if ($limit) { check_limit_str($limit); $sql .= " LIMIT ".$limit; } $rows = $this->fetch_array($sql); return $rows; } /** * 查询指定结果函数 * @access public * @param string $where_str 查询条件 * @param string $select_str 查询字段 * @return array */ public function get_table_row_info($where_str='', $select_s tr = "*") { $sql = " Select {$select_str} FROM {$this->db_name}.{$thi s->tbl_name}"; if( $where_str ) $sql .= " Where {$where_str} LIMIT 0,1"; $ret_arr = $this->fetch_one_array($sql); return $ret_arr; } /** * 插入数据函数 * @access public * @param array $insert_arr 数据数组 * @param string $insert_type 插入数据方式:REPLACE替换插入,IGNORE 防止重复插入 * @return int $id 最新插入ID */ public function _insert_table_filed($insert_arr, $insert_type = "") { $insert_str = arr_to_update_str($insert_arr); if ( $insert_type == "REPLACE" )$sql = "REPLACE INTO {$this->d b_name}.{$this->tbl_name} SET {$insert_str}"; elseif ( $insert_type == "IGNORE" )$sql = "Insert IGNORE INTO { $this->db_name}.{$this->tbl_name} SET {$insert_str}"; else $sql = "Insert INTO {$this->db_name}.{$this->tbl_name} SE T {$insert_str}"; $this->udiquery($sql); $id = $this->get_insert_id(); return $id; } /** * 删除表数据 * @access public * @param string $where_str 删除条件 * @return bool */ public function del_table_flied($where_str) { if( $where_str ){ $sql = " Delete FROM {$this->db_name}.{$this->tbl_name} Wh ere {$where_str}"; $ret = $this->udiquery($sql); return $ret; } else { exit("执行".__CLASS__."类中".__FUNCTION__."方法错误:sql的whe re_str条件不能为空 line ".__LINE__.' IN '.__FILE__); } } /** * 更新表数据函数 * * @access public * @param array $update_arr 要更新的字段数组 * @param string $update_tbl 要更新的表名 * @param string $where_str 要更新的条件 */ public function update_table_field( $update_arr, $where_str ) { if( !emptyempty($update_arr)&&!emptyempty($where_str) ){ $update_str = arr_to_update_str($update_arr); $sql = " Update {$this->db_name}.{$this->tbl_name} S ET $update_str Where {$where_str}"; $ret = $this->udiquery($sql); return $ret; } } } ?> <? /** *数据库操作函数 * * @author Hai */ if (!function_exists("microtime_float")) //返回当前精确到毫妙的秒数 { function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } } if( !function_exists("trace") ) { //打印出sql执行信息 function trace( $sql,$cost_time,$db_server ) { echo("[SQL:{$sql} QUERY_TIME:{$cost_time}s server:{$db_serv er}]</p>"); } } if (!function_exists("arr_to_update_str")) //将数组转换为键对值的字符 { function arr_to_update_str($data_arr) { if( !emptyempty($data_arr) ) { foreach ($data_arr as $key=>$val) { $sql_str_arr[] = "{$key}='{$val}'"; } $sql_str = implode(',',$sql_str_arr); return $sql_str; } else{ exit('函数'.__FUNCTION__.'执行时产生错误:data_arr 数组为空。l ine '.__LINE__.' IN '.__FILE__); } } } if (!function_exists("check_limit_str")) //检测 limit 是否合法 { function check_limit_str($limitstr) { $limitstr = trim($limitstr); $limitstr = str_replace(" ","",$limitstr); $chech_status = preg_match("/^\d+,\d+$/i",$limitstr); if (!$chech_status) exit('函数'.__FUNCTION__.'执行时产生错误:非 法的limit语句。limit[{$limitstr}] line '.__LINE__.' IN '.__FILE__); return $chech_status; } } if (!function_exists("check_order_by")) //检测 order by 是否合法 { function check_order_by($orderby) { $orderby = trim($orderby); $c = preg_match("/^([ ,A-Za-z0-9_])* [DESC|ASC]+$/i",$o rderby); if (!$c) exit('函数'.__FUNCTION__.'执行时产生错误:非法的orderby语 句。order by[{$orderby}] line '.__LINE__.' IN '.__FILE__); return $c; } } if (!function_exists("aasort")) { //二维数组排序 使用方法 $array 传入的数组 $args 需要排序的列 前缀为 + 的是升 序 ,-为降序。例:aasort($array,'-id') function aasort($array, $args) { $sort_rule=""; foreach($args as $arg) { $order_field = substr($arg, 1, strlen($arg)); foreach($array as $array_row) { $sort_array[$order_field][] = $array_row[$order_field]; } $sort_rule .= '$sort_array['.$order_field.'], '.($arg[0] = = "+" ? SORT_ASC : SORT_DESC).','; } eval ("array_multisort($sort_rule".' &$array);'); } } ?> <? //本实例声明了两个数据库基类及一些数据库操作的函数,底层基类包含数据表最基本的操 作,连接数据库、返回记录集、关闭连接等。 //中间层在继承底层基类方法后,定义了一些直接对数据表查询、添加、修改、删除的方法。 //使用方法 : //一个数据表对应一个表操作类文件,声明时需继承基类的操作方法.表操作类当中可以定 义数据库及数据表名称,引用该文件实例化对象后会更改底层基类成员值并执行底层基类的构造函数进行连接数据库。 //例: class students_class extends db_base{ protected $db_name = 'test'; protected $tbl_name = 'course'; public function get_students_list_by_id($cno_id) { if(!emptyempty($cno_id)){ $where_str = " Cno={$cno_id}"; return $this->get_table_row_info($where_str); } } } $students_obj = new students_class(); var_dump($students_obj->get_students_list_by_id(1)); ?>