sqlHelper封装类,用于对数据库的操作,此类将查询操作中返回的结果集传递给了一个数组,直接将资源关闭

时间:2022-12-11 08:38:38

SqlHelper.class.php类

<?php

//工具类,完成对数据库的操作
	class SqlHelper{
		private $conn;
		private $host="localhost";
		private $user="root";
		private $password="";
		private $db="test1";
		
		function __construct(){
			//连接数据库
			$this->conn=mysql_connect($this->host,$this->user,$this->password);
			if(!$this->conn){
				die("对不起,连接数据库失败<br/>错误原因:".mysql_error());
			}
			mysql_select_db($this->db,$this->conn);//选择数据库
			mysql_query("set names utf8");
		}
		public function execute_dql($sql){
			//执行数据库dql语句,即查询操作,返回的是结果集,集合
			$res=mysql_query($sql,$this->conn) or die("查询失败,失败原因".mysql_error());
			return $res;
		}
		/*  
		 * execute_dql2方法将从数据中查询获取到的结果集放到数组,方便关闭结果集资源(资源需要在哪里取到在哪里释放)
		 * */
		public function execute_dql2($sql){
			$arr=array();//先声明一个数组
			//执行数据库dql语句,即查询操作,返回的是结果集,集合
			$res=mysql_query($sql,$this->conn) or die("查询失败,失败原因".mysql_error());
			//使用while循环取出结果集的数据放入数组把$res=>$arr
			$i=0;
			while ($row=mysql_fetch_assoc($res)){
				$arr[$i++]=$row;
			}
			//这里就可以马上把资源$res释放
			mysql_free_result($res);
			return $arr;
		}
		//在这里就实现了对CRUD的完全封装
		public function execute_dml($sql){
			$b=mysql_query($sql,$this->conn);
			if(!$b){
				//return 0; //运行失败
				echo "对不起,操作失败";
			}else{
				//返回的是受影响行数
				if(mysql_affected_rows($this->conn)>0){
					//return 1; //运行成功
					echo "操作成功!";
				}else{
					//return 2; //成功,但没有影响行数
					echo "操作成功,但是行数没有受到影响";
				}
			}
			//mysql_close($this->conn);//关闭连接
		}
		
		//关闭连接的方法,当连接不为空的时候再关闭,避免某些情况下连接关闭,可执行多条语句
		public function close_connect(){
			if(!empty($this->conn)){
				mysql_close($this->conn);
			}
		}
	}
	?>

EmpService.class.php类,获取数据库查询的结果,处理结果用于分页的数据显示操作

<?php
class EmpService{
	//定义函数,获取共有多少页,需要传递一个$pageSize参数
	 function getpageCount($pageSize){
		//编写sql语句,查询数据库的数据
		$sql="select count(id) from tb_user";
		//创建sqlHelper对象,调用查询方法
		$sqlHelper=new SqlHelper();
		$res=$sqlHelper->execute_dql($sql);
		//对查询结果进行判断,取出查询的结果,计算出pageCount
		if($row=mysql_affected_rows($res)){
		//得到共有多少条数据记录
		$rowCount=$row[0];	
		$pageCount=ceil($rowCount/$pageSize);
	}
	//释放资源关闭连接
	mysql_free_result($res);
	$sqlHelper->close_connect();
	//返回共有多少页
	return $pageCount;
	
}
//定义函数,获取每页显示的数据
	function getEmpListByPage($pageNow,$pageSize){
	//编写sql语句,查询具体数据,因为页面要进行分页处理,这里传sql语句的时候要限制条件(从第几条数据开始取,每页显示多少条数据)
	$sql="select * from tb_user limit ".($pageNow-1)*$pageSize.",$pageSize'";
	$sqlHelper=new SqlHelper();
	//这里获取的$arr是一个二维数组
	$arr=$sqlHelper->execute_dql2($sql);
	
	//释放资源,关闭连接
	$sqlHelper->close_connect();
	return $arr;
}
}

empList.php分页的页面显示

<html>
<head>
<meta 
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
require_once 'AdminService.class.php';

/*
分页
*/
$pageSize=6;//自定义,每页显示3条数据
//$rowcount=0;//共有多少条记录,需要从数据中查询
//$pageCount=0;//共有几页,需要计算

$pageNow=1;//显示第几页,变化量,根据用户点击超链接确定,首先要先判断是否有pageNow发送,没有就显示默认显示第一页
if(!empty($_GET['pageNow'])){
	$pageNow=$_GET['pageNow'];
}
$empService=new EmpService();
//获取共有多少页,需调用empService.class.php的getpageCount方法,获取该方法的返回值
$pageCount=$empService->getpageCount($pageSize);
//获取每页显示的数据,需调用empService.class.php的getEmpListByPage方法,获取该方法的返回值
$rarr=$empService->getEmpListByPage($pageNow,$pageSize);
//将获取到的数据写入表格
echo "<table border='1' width='700px'>";
echo "<tr><th>ID</th><th>姓名</th><th>等级</th><th>电子邮箱</th><th>薪资</th><th>操作</th></tr>";
if($arr){
	//这里要通过数组取
	for($i=0;$i<count($arr);$i++){
		//将数组中取出的每一列放到$row中
		$row=$arr[$i];
		echo "<tr><td>{$row['Id']}</td><td>{$row['name']}</td>".
				"<td>{$row['grade']}</td><td>{$row['email']}</td><td>{$row['salary']}</td>".
				"<td align='center'><a href='#'>修改用户</a> | <a href='#'>删除用户</a></td></tr>";
	}
	/* 
	 * 此方法是直接使用从数据库查询结果传递过来的结果集,需要在这里关闭结果集
	 * while ($row=mysql_fetch_assoc($res2)){
		echo "<tr><td>{$row['Id']}</td><td>{$row['name']}</td>".
		"<td>{$row['grade']}</td><td>{$row['email']}</td><td>{$row['salary']}</td>".
		"<td align='center'><a href='#'>修改用户</a> | <a href='#'>删除用户</a></td></tr>";
		
	} */
}
echo "</table>";
//主要显示页码,用户点击页码是对该页面发出指令,所以页码连接主要是该页面
/* for($i=1;$i<=$pageCount;$i++){
	echo "<a href='empList.php?pageNow=$i'>{$i} </a>";
} */

//显示上一页下一页,总页数,跳转制定页面
echo"<a href='empList.php?pageNow=1'>首页</a> ";
if($pageNow>1){
	//上一页
	$perPage=$pageNow-1;
	echo "<a href='empList.php?pageNow=$perPage'>上一页</a> ";
}

if($pageNow<$pageCount){
//下一页
$nextPage=$pageNow+1;
echo "<a href='empList.php?pageNow=$nextPage'>下一页</a> ";
}
echo"<a href='empList.php?pageNow=$pageCount'>最后一页</a>";
	echo " 共有{$pageCount}页 ";
//跳转到制定页面,使用表单形式实现
echo "<form action='empList.php'>";
echo "跳转到<input type='text' name='pageNow'/>页 ";
echo "<input type='submit' value='GO'/>";
echo "</form>"; 
//关闭资源
/* mysql_free_result($res1);
mysql_close($conn); */
?>
</body>
</html>

学到这一步了,记录一下,有待用更好的方法完善