21,886
社区成员
发帖
与我相关
我的任务
分享
<?php
/*
*
*
*
*
*
*小型DB类
*有什么需要修改的地方大家多指点一下我也是刚学到类
*所以不懂的地方很多修改的地方也指正一下小弟会虚心
*接受并休整错误的
*
*
*/
class DB
{
/**************************
*****数据库访问的结果集*****
***************************/
var $conn = '';
/**************************
*****数据访问的判断********
***************************/
var $result = '';
/*******************************
*****初始化数据库的结果总数*****
********************************/
var $num = '';
/*******************************
*****初始化数据库的返回结果*****
********************************/
var $list = array();
/*******************************
*********初始化分页结果*********
********************************/
var $p = array();
/********************************
*********初始化页数结果*********
********************************/
var $show=array();
var $o2show=array();
var $str='';//初始化路径地址
/*
*
*
*
* $sql 参数以数组形式传进去
*$sql['dbip']数据库地址
*$sql['dbuser']数据库用户
*$sql['dbpass']数据库密码
*$sql['dbname']数据库名
*
*
*
*/
public function DB($sql)//构造函数用于连接数据库
{
$this->conn = mysqli_connect($sql['dbip'],$sql['dbuser'],$sql['dbpass'],$sql['dbname']);//连接
if(mysqli_connect_errno())//判断是否连接成功
{
exit("数据库连接失败未知错误请仔细检查数据库是否配置有误");
}
mysqli_query($this->conn,"SET NAMES utf8");//运行字符编码规则
return $this->conn;//返回结果
$this->str=DB::str();
}
/*
*
*
*
*$sql数据库语句
*并执行把结果负给类全局变量$this->list
*
*
*
*/
public function query($sql)
{
if(ereg("^(insert|update|delete|select|INSERT|SELECT|DELETE|UPDATE)",$sql))
{
$this->result = @mysqli_query($this->conn,$sql) or die("数据加载错误");//执行数据库语句
}
if(ereg("^(insert|INSERT)",$sql))//判断语句的类型是否为insert
{
return true;
}
elseif(ereg("^(update|UPDATE)",$sql))//判断语句的类型是否为update
{
return true;
}
elseif(ereg("^(delete|DELETE)",$sql))//判断语句的类型是否为delete
{
return true;
}
elseif(ereg("^(select|SELECT)",$sql))//判断语句的类型是否为select时候执行并返回字段所有数据
{
$int = 0;
while($row = @mysqli_fetch_assoc($this->result))//取字段结果
{
$this->list[$int] = @$row;
$int++;
}
return $this->list;
}
else
{
return false;
}
}
/*
*
*
*
*无参数类库函数
*取出结果的总数
*
*
*/
public function num()
{
$this->num = @mysqli_num_rows($this->result);//结果的总行数
return $this->num;
}
/*
*
*
*
*实现LIMIT功能详细请看db/db.php文件使用例子
*
*
*
*/
public function limit($page = '1',$pagesize = '10')//$page变量用于变别本页页数
{
$pagein = $page;
if($page!= 0 or $page!= 1)//当前页数不等于0或1的时候从$page变量减去一
{
$page -= 1;
}
$intage = $page*$pagesize;//配置显示的第一个数据
$int = $intage+$pagesize-1;//配置显示的最后一个数据
for($a = $intage;$a <= $int;$a++)//输出结果
{
if(!$this->list[$a])break;
$this->p['query'][] = $this->list[$a];
$ac[] = $a;
}
/*
*配置的页数
*/
$pages = (int)(count($this->list)/$pagesize);
$pagea = count($this->list)/$pagesize;
$pageq = $pagea-$pages;
if($pageq>0)
{
$pages += 1;
}
$this->p['page_is'] = $pagein; //本页数
$this->p['count_page'] = (int)($pages);//总页数
$this->p['select_start'] = $intage;//数据的起始位置
$this->p['select_counts'] = count($ac);//数据的数量
return $this->p;
}
/*
*
*
*
*
*显示分页的页数
*
*
*
*
*/
public function Count_show($why='',$count_show = 10,$string = '',$previous='',$next='',$as='')//显示页数
{
$int = ((int)$this->p['page_is'])-((int)$count_show);//控制显示页数的初始直
$ints = $this->p['page_is']+$count_show;//控制显示页数的结束
$intage = $count_show*2+1;//控制页数的显示数量
if($int <= 0 and $int > 0)//..
{
$int = 1;
}
$str=$this->str;//分析路径地址
if($this->p['page_is'] > 1)//分析上一页的页数
{
$a = $this->p['page_is']-1;
$this->show['previous']=" <a href ='{$str}?page={$a}{$why}'" . $previous . " >上一页</a> ";
}
else
{
$this->show['previous']=" <a href='#' {$previous}>上一页</a> ";
}
for($a = $int; $a <= $this->p['count_page']; $a++)/*执行页数的显示*/
{
if($a<$int or $a<1)
{
continue;
}
if($a==$this->p['page_is'])
{
$this->show[]=" <a href='#' ".$as.">".$a."</a> ";
continue;
}else
{
$this->show[]=" <a href ='{$str}?page={$a}{$why}' {$string}>" . $a . "</a> ";
}
if($a >= $ints)
{
break;
}
}
if($this->p['page_is']<$this->p['count_page'])//分析下一页的页数
{
$a = $this->p['page_is']+1;
$this->show["next"]=" <a href = '{$str}?page={$a}{$why}' {$next} >下一页</a> ";
}
else
{
$a = $this->p['page_is']+1;
$this->show["next"]=" <a href='#' {$next}>下一页</a>";
}
unset($a);
return $this->show;
}
//分页函数参数:(参数1.'其他的连接参数比如:&action=index&id=1 这快必须添加&字符',参数2.'显示页数的控制写2的话就显示除了本页的前2个跟后2个当前两个跟后两个不存在他就不显示',参数3.'为了在A标签里头添加样式写了后面几个参数这个参数是用来控制显示页数参数用法如:class="page_show"',参数4。'上一页的样式参数',参数5.'下一页的样式参数用法跟参数3一样',参数6.'本页的数字参数如当我访问的是第3页的时候第3页的参数')
public function Baidupageshow($why='',$count_show='',$string='',$previous='',$next='',$as='')
{
$page=DB::Count_show($why,$count_show,$string,$previous,$next,$as);
echo $page['previous'];//输出上一页
for($a=0;$a<=count($page)-2;$a++)
{
echo $page[$a];//输出页数
}
echo $page['next'];//输出下一页
}
/***********未完成的分页函数(不推荐)*************/
/**
public function o2pageshow($page = '1')
{
$in_page=$page-1;
echo "<a href='".$this->str."?page={$in_page}'>previous</a>";
for($a=$in_page+1;$a<=$in_page+9;$a++)
{
echo $this->o2show[$a]=$a.' ';
}
echo "<a href='".$this->str."?page={$a}'>NEXT</a>";
}**/
public function str()
{
$str='http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
return $str;
}
}
?>