PHP操作mysql类的封装

版本一:

<?php
    //这是一个工具类,作用是完成对数据库的操作
    class SqlHelper {
        public $conn;
        public $dbname="test";
        public $username="root";
        public $password="root";
        public $host="localhost";
        
        public function __construct() {
            $this->conn=mysqli_connect($this->host,$this->username,$this->password,$this->dbname);
            if (!$this->conn) {
                mysqli_error($this->conn);
                die("连接失败".mysqli_error($this->conn));
            }
            //设置访问数据库的编码
            mysqli_query($this->conn, "set names utf8") or die(mysqli_error($this->conn));
        }
        
        //执行dql语句
        public function execute_dql($sql) {
            $res=mysqli_query($this->conn,$sql) or die(mysqli_error($this->conn));
            
            return $res;
        }
        
        //执行dql语句,但是返回的是一个数组
        public function execute_dql2($sql) {
            $arr=array();
            $res=mysqli_query($this->conn,$sql) or die(mysqli_error($this->conn));
            
            //$i=0;
            while($row=mysqli_fetch_assoc($res)) {
                //$arr[$i++]=$row;
                $arr[]=$row;
            }
            
            //这里就可以马上把$res关闭
            mysqli_free_result($res);
            return $arr;
        }
        
        //考虑分页情况的查询,这是一个比较通用的并体现oop编程思想的代码
        //$sql1="select * from where 表名 limit 0,6";
        //$sql2="select * from count(id) from 表名";
        public function execute_dql_fenye($sql1,$sql2,$fenyePage) {
            //分页显示的数据
            $res=mysqli_query($this->conn, $sql1) or die(mysqli_error($this->conn));
            $arr=array();
            while($row=mysqli_fetch_assoc($res)) {
                $arr[]=$row;
            }
            
            //这里就可以马上把$res关闭
            mysqli_free_result($res);
            
            $res2=mysqli_query($this->conn, $sql2) or die(mysqli_error($this->conn));
            if($row=mysqli_fetch_row($res2)) {
                $fenyePage->pageCount=ceil($row[0]/$fenyePage->pageSize);
                $fenyePage->rowCount=$row[0];
            }
            
            mysqli_free_result($res2);
            
            $fenyePage->res_array=$arr;
            
            
            $navigation="";
            $navigation.= "<a href='{$fenyePage->gotoUrl}?pageNow=1'>首页</a> ";
            
            //显示上一页和下一页
            if($fenyePage->pageNow > 1) {
                $prePage=$fenyePage->pageNow-1;
                $navigation.= "<a href='{$fenyePage->gotoUrl}?pageNow=$prePage'>上一页</a> ";
            }
            
            $page_whole=10;//整体翻几页
            $start=(floor(($fenyePage->pageNow-1)/$page_whole))*$page_whole+1;
            $end=$start+$page_whole;
            
            //整体每10页向前翻页
            //如果当前pageNow在1-10
            if ($fenyePage->pageNow>$page_whole)
                $navigation.= "<a href='{$fenyePage->gotoUrl}?pageNow=".($start-1)."'><<</a> ";
            
            for(;$start<$end && $start<=$fenyePage->pageCount;$start++) {
                $navigation.= "<a href='{$fenyePage->gotoUrl}?pageNow=$start'>[$start]</a>";
            }
            
            if($start <= $fenyePage->pageCount)
                $navigation.= " <a href='{$fenyePage->gotoUrl}?pageNow=$start'>>></a>";
            
            //显示上一页和下一页
            if($fenyePage->pageNow < $fenyePage->pageCount) {
                $nextPage=$fenyePage->pageNow+1;
                $navigation.= " <a href='{$fenyePage->gotoUrl}?pageNow=$nextPage'>下一页</a> ";
            }
            
            
            $navigation.= "<a href='{$fenyePage->gotoUrl}?pageNow=$fenyePage->pageCount'>尾页</a> ";
            
            //显示当前页和共有多少页
            $navigation.= "第{$fenyePage->pageNow}页/共{$fenyePage->pageCount}页";
            
            $fenyePage->navigation=$navigation;
        }
        
        //执行dml语句
        public function execute_dml($sql) {
            $b=mysqli_query($this->conn, $sql) or die(mysqli_error($this->conn));
            if(!$b) {
                return 0;
            } else {
                if(mysqli_affected_rows($this->conn)>0) {
                    return 1;//表示执行成功
                } else {
                    return 2;//表示没有行收到影响
                }
            }
        }
        
        //关闭连接的方法
        public function close_connect() {
            if(!empty($this->conn))
                mysqli_close($this->conn);
        }
    }
?>

版本二:(来源于慕课网的学习)

<?php 
	error_reporting(E_ALL &~E_NOTICE &~E_DEPRECATED);
	class mysql {
		/*
			报错函数
			@param string $error
		 */
		function err($error) {
			die("对不起,您的操作有误,错误原因为:".$error); //die有两种作用 输出 和 终止 相当于echo和exit的组合
		}

		/*
			连接数据库
			@param string $config 配置数组 array($dbhost, $dbuser, $dbpsw, $dbname, $dbcharset)
			@return bool 连接成功或不成功
		 */
		function connect($config) {
			extract($config); //将数组还原成变量
			if(!($con = mysql_connect($dbhost, $dbuser, $dbpsw))) { //mysql_connect 连接数据库函数
				$this->err(mysql_error());
			}

			if(!mysql_select_db($dbname, $con)) { //mysql_select_db 选择数据库的函数
				$this->err(mysql_error());
			}
			mysql_query("set names ".$dbcharset); //使用mysql_query 设置编码,格式: mysql_query("set names utf8")
		}

		/*
			执行sql语句
			@param string $sql
			@return bool 返回执行成功、资源或执行失败
		 */
		function query($sql) {
			if(!($query = mysql_query($sql))) { //使用mysql_query函数执行sql语句
				$this->err($sql."<br />".mysql_error()); //mysql_error报错
			} else {
				return $query;
			}
		}

		/*
			列表
			@param source $query sql语句通过mysql_query 执行出来的资源
			@return array 返回列表数组
		 */
		function findAll($query) {
			while($rs = mysql_fetch_array($query, MYSQL_ASSOC)) { //mysql_fetch_array函数把资源换为数组,一次转换出一行出来
				$list[] = $rs;
			}
			//这里应该释放结果集吧
			//mysql_free_result($query)
			return isset($list) ? $list : "";
		}

		/*
			单条
			@param source $query sql语句通过mysql_query执行出来的资源
			return array 返回单条信息数据
		 */
		function findOne($query) {
			$rs = mysql_fetch_array($query, MYSQL_ASSOC);
			return $rs;
		}

		/*
			指定行的指定字段的值
			@param source $query sql语句通过mysql_query执行出来的资源
			return array 返回指定行的指定字段的值
		 */
		function findResult($query, $row = 0, $field = 0) {
			$rs = mysql_result($query, $row, $field);
			return $rs;
		}

		/*
			添加函数
			@param string $table 表名
			@param array $arr 添加数组(包含字段和值的一维数组)
		 */
		
		function insert($table, $arr) {
			// $sql = "insert into 表名(多个字段) values(多个值)";
			// mysql_query($sql)
			foreach ($arr as $key => $value) {
				$value = mysql_real_escape_string($value);
				$keyArr[] = "`".$key."`"; //把$arr数组当中的键名保存到$keyArr数组当中     insert into test(`a`,`b`,`c`) values... 其中 ` 防止字段中因关键字而出错
				$valueArr[] = "'".$value."'"; //把$arr数组当中的键值保存到$valueArr当中,因为值多为字符串,而sql语句里面insert当中如果值是字符串的话要加单引号,所以这个地方要加上单引号
			}

			$keys = implode(",", $keyArr); //implode函数是把数组组合成字符串 implode(分隔符,数组)
			$values = implode(",", $valueArr);
			$sql = "insert into ".$table."(".$keys.") values(".$values.")"; //sql的插入语句 格式:insert into 表(多个字段) values(多个值)
			$this->query($sql); //调用类自身的query(执行)方法执行这条sql语句 注:$this指代自身
			return mysql_insert_id();
		}

		/*
			修改函数
			@param string $table 表名
			@param array $arr 修改数组(包含字段和值的一维数组)
			@param string $where 条件
		 */
		function update($table, $arr, $where) {
			//update 表名 set 字段=字段值 where ....
			foreach($arr as $key=>$value) {
				$value = mysql_real_escape_string($value);
				$keyAndvalueArr[] = "`".$key."`='".$value."'";
			}
			$keyAndvalues = implode(",", $keyAndvalueArr);
			$sql = "update ".$table." set ".$keyAndvalues." where ".$where; //修改操作 格式update
		}

		/*
			删除函数
			@param string $table 表名
			@param string $where 条件
		 */
		function del($table, $where) {
			$sql = "delete from ".$table." where ".$where; //删除sql语句 格式:delete from 表名 where 条件
			return $this->query($sql);
		}
	}
?>


DB引擎工厂类

<?php 
	//DB 引擎工厂类
	class DB {
		public static $db;
		public static function init($dbtype, $config) {
			self::$db = new $dbtype;
			self::$db->connect($config);
		}

		public static function query($sql) {
			return self::$db->query($sql);
		}

		public static function findAll($sql) {
			$query = self::$db->query($sql);
			return self::$db->findAll($query);
		}

		public static function findOne($sql) {
			$query = self::$db->query($sql);
			return self::$db->findOne($query);
		}

		public static function findResult($sql, $row = 0, $field = 0) {
			$query = self::$db->query($sql);
			return self::$db->findResult($query, $row, $field);
		}
		
		public static function insert($table, $arr) {
			return self::$db->insert($table, $arr);
		}

		public static function update($table, $arr, $where) {
			return self::$db->update($table, $arr, $where);
		}

		public static function del($table, $where) {
			return self::$db->del($table, $where);
		}
	}
?>



  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值