<?
/*
数据库内详细介绍:
1 属性
$dbtype='mysql'; //数据库类型 | $user=''; //用户名 | $pass=''; //密码 | var $host=''; 主机| $database=''; //库名
$table = ''; //表名 | $handle; //数据库指针| $rs = array();查询结果集数组 | $last_rs 上次操作记录集名
$rows_num=0; 总记录数 | $page=0; //当前页数 | $pages_num=0; //总页数 | $rows_per_page=0; 每页记录行数
$rows_offset=0; //分页起始偏移 $params=''; //链接附加参数 $show_page_num=0; //分页样式2时显示页数(最好为单数)
$mod = 1; //模式。主要用于数组与数据库关联的时num 型,还是$key=>$val型;
$func_ary 得到记录集的类型。
*/
// 方法 1 db() 构造函数。
// 方法 2 conn() 数据库服务连接。
// 方法 3 close() 断开数据库连接
// 方法 4 setdb($database='newmambo') 打开库
// 方法 5 query($sql) 查询sql语句
// 方法 6 insid() 返回最后插入ID
// 方法 7 affrow() 返回上次操作影响行数
// 方法 8 err() 返回出错信息数组array(error no,error text)
// 方法 9 rs($sql='',$rs_name='') 返回结果集
// 方法 10 rn($sql='',$type='num',$rs_name='',$num=1) 返回数值索引数组
// 方法 11 val($sql) 单值快速返回
// 方法 12 num($sql='',$rs_name='rs') 返回记录集行数
// 方法 13 clean($rs_name) 清除结果集缓存
// 方法 14 reset ($rs_name) 记录集指针回零
// 方法 15 pnum($page,$rows_num,$rows_per_page=20,$offset=0) 设置分页参数
// 方法 16 page($sql,$rs_name='') 查询分页
// 方法 17 nav($style='nav1',$show_page_num=15) 翻页控制html代码输出 (目前有四种样式,可进一步扩展)
// 方法 18 卡param($param,$filter='') 链接参数转换
// 方法 19 insertbyArray($dataArray,$mod = 1)
insertbyArray /
将数组内的值,插入到数据库中去
/*
第一个参数为插入数据,第二个参数为插入模式。
当模式为1 时,数组为索引数组,是将数据库的字段依次读出来,做为插入条件。
当模式为2 时,数组为键值索引。
*/
// 方法 20 updatebyArray($dataArray,$mod=1,$cond="")
updatebyArray /
根据数组的值,来更新数据
/*
第一个参数为插入数据,第二个参数为插入模式。
当模式为1 时,数组为索引数组,是将数据库的字段依次读出来,做为更新条件。
当模式为2 时,数组为键值索引。条件直接从数组来生成出来。
并添加查询条件,强制庙宇为没有查询条件时不进行数据更换操作。
*/
// 方法 20 del($cond='')
del byArray /
根据条件生成删除的值。
/// 并添加查询条件,强制庙宇为没有查询条件时不进行数据更换操作。
class db {
var $dbtype='mysql'; //数据库类型
var $user=''; //用户名
var $pass=''; //密码
var $host=''; //地址
var $database=''; //库名
var $table = ''; //表名。
var $handle; //数据库句柄
var $rs = array(); //查询结果集数组
var $last_rs = ''; //上次操作记录集名
var $rows_num=0; //总记录数
var $page=0; //当前页数
var $pages_num=0; //总页数
var $rows_per_page=0; //每页记录行数
var $rows_offset=0; //分页起始偏移
var $params=''; //链接附加参数
var $show_page_num=0; //分页样式2时显示页数(最好为单数)
var $mod = 1; //模式。
var $func_ary = array( //函数数组
'farray' => 'mysql_fetch_array',
'fnum' => 'mysql_fetch_row',
'ffield' => 'mysql_fetch_assoc',
'fobject' => 'mysql_fetch_object',
);
/* 构造函数*/
function db($type='mysql') {
if($type!='') $this->dbtype = $type;
if(!$this->func_ary[$this->dbtype]) {
return false;
}else {
return true;
}
}
/* 数据库服务连接 */
function conn($host='61.234.152.100',$user='root',$pass='admin') {
if(gettype($host)=='resource') {
$this->handle = $host;
}else {
if($host!='') $this->host = $host;
if($user!='') $this->user = $user;
if($pass!='') $this->pass = $pass;
$this->handle = mysql_connect($this->host,$this->user,$this->pass,false,MYSQL_CLIENT_COMPRESS) or die("数据库无法连接,请稍候……");
return $this->handle;
}
}
/* 断开数据库连接 */
function close() {
@mysql_close($this->handle);
}
/* 打开库 */
function setdb($database='newmambo') {
if($database!='') $this->database= $database;
@mysql_select_db($this->database,$this->handle);
}
/* 查询sql语句 */ /*?*/
function query($sql) {
if(is_array($sql)) {
for($i=0; $i<sizeof($sql); $i++) {
$tmp = @mysql_query($sql[$i],$this->handle);
}
return $tmp;
}else {
return @mysql_query($sql,$this->handle);
}
}
/* 返回最后插入ID */
function insid() {
return @mysql_insert_id($this->handle);
}
/* 返回上次操作影响行数 */
function affrow() {
return @mysql_affected_rows($this->handle);
}
/* 返回出错信息数组array(error no,error text) */
function err() {
return array(@mysql_errno(), @mysql_error($this->handle));
}
/* 返回结果集 */
function rs($sql='',$rs_name='') {
if($rs_name==''&&$this->last_rs=='') {
$rs_name='rs';
}elseif($rs_name=='') {
$rs_name = $this->last_rs;
}
$sql_tmp = is_array($sql)?$sql[sizeof($sql)]:$sql;
if($sql_tmp!=''&&$this->result[$rs_name][0]!=$sql){
$tmp = $this->query($sql);
$this->result[$rs_name] = array($sql_tmp,$tmp);
$this->last_rs = $rs_name;
}
return $this->result[$rs_name][1];
}
/* 返回数值索引数组 */
function rn($sql='',$type='num',$rs_name='',$num=1) {
if(!$type) $type='num';
if(!in_array($type,array('num','field','array','object'))) return false;
if($num==1) {
return @$this->func_ary['f'.$type]($this->rs($sql,$rs_name));
}elseif($num=='all') {
while($tmp[] = @$this->func_ary['f'.$type]($this->rs($sql,$rs_name))) {
}
}elseif(is_int($num)) {
for($i=0; $i<$num; $i++) {
$tmp1 = @$this->func_ary['f'.$type]($this->rs($sql,$rs_name));
if($tmp1===false) {
break;
}else {
$tmp[] = $tmp1;
}
}
}else {
return false;
}
return $tmp;
}
/* 单值快速返回 */
function val($sql) {
$tmp = mysql_fetch_row($this->query($sql));
if(is_null($tmp)) {
echo($sql);
echo"<pre>";
print_r($this->err());
echo"</pre>";
}
return $tmp[0];
}
/* 返回记录集行数 */
function num($sql='',$rs_name='rs') {
return @mysql_num_rows($this->rs($sql,$rs_name));
}
/* 清除结果集缓存 */
function clean($rs_name) {
if(is_array($rs_name)) {
foreach($rs_name as $val) {
@mysql_free_result($this->result[$rs_name][1]);
unset($this->result[$val]);
}
}else {
@mysql_free_result($this->result[$rs_name][1]);
unset($this->result[$rs_name]);
}
}
/* 记录集指针回零 */
function reset ($rs_name) {
if(is_array($rs_name)) {
foreach($rs_name as $val) {
@mysql_data_seek($this->result[$val][1],0);
}
}else {
@mysql_data_seek($this->result[$rs_name][1],0);
}
}
/* 设置分页参数 */
function pnum($page,$rows_num,$rows_per_page=20,$offset=0) {
if($rows_num) $this->rows_num = $rows_num;
if($rows_per_page) $this->rows_per_page = $rows_per_page;
if($offset) $this->offset = $offset;
if(!$page) $page =1;
$this->page = $page;
$this->pages_num = ceil(($this->rows_num-$this->offset)/$this->rows_per_page);
Return $this->pages_num;
}
/* 查询分页 */
function page($sql,$rs_name='') {
switch($this->dbtype) {
case 'mysql':
$sql = $sql." limit ".(($this->page-1)*$this->rows_per_page+$this->offset).", ".$this->rows_per_page;
return $this->rs($sql,$rs_name);
break;
}
}
/* 翻页控制html代码输出 */
function nav($style='nav1',$show_page_num=15) {
switch($style) {
/* 连接翻页1: 首页 | 上页 | 下页 | 末页 */
case 'nav1':
if ($this->page > 1) {
$nav .= '<a href="?page=1&'.$this->params.'" class="page_linked">首页</a> | ';
$nav .= '<a href="?page='.($this->page-1).'&'.$this->params.'" class="page_linked">上页</a> | ';
}else {
$nav .= '<span class="page_unlink">首页</span> | ';
$nav .= '<span class="page_unlink">上页</span> | ';
}
if ($this->page < $this->pages_num) {
$nav .= '<a href="?page='.($this->page+1).'&'.$this->params.'" class="page_linked">下页</a> | ';
$nav .= '<a href="?page='.$this->pages_num.'&'.$this->params.'" class="page_linked">末页</a>';
}else {
$nav .= '<span class="page_unlink">下页</span> | ';
$nav .= '<span class="page_unlink">末页</span>';
}
break;
/* 连接翻页1: 第 1 2 3 4 5 6 7 8 9 页*/
case 'nav2':
for($i=1; $i<=$this->pages_num; $i++) {
if($i == $this->page) {
$nav .= " <font style='font-size:12pt' face='Verdana'><b>$i</b></font> ";
}else {
$nav .= " <a href=?page=$i&".$this->params."><font style='font-size:9pt;' face='Verdana'>$i</font></a> ";
}
}
$nav = "第 $nav 页";
break;
/* 连接翻页3: << 第一页 ... << 上一页 6 7 8 9 10 11 12 13 14 15 16 17 18 下一页 >> ... 最后页 >> */
case 'nav3':
if($show_page_num) $this->show_page_num = $show_page_num;
$page = $this->page;
$show_page_num = $this->show_page_num;
$pages_num = $this->pages_num;
$param = $this->params;
$mid = ceil(($show_page_num+1)/2);
$nav = '';
if($page<=$mid ) {
$begin = 1;
}else if($page > $pages_num-$mid) {
$begin = $pages_num-$show_page_num+1;
}else {
$begin = $page-$mid+1;
}
if($begin<0) $begin = 1;
if($begin!=1) $nav .= " <a href='?$param' title='第1页'>« 第一页</a> ... ";
if($page>1) $nav .= " <a href='?$param&page=".($page-1)."' title='第".($page-1)."页'>« 上一页</a> ";
$end = ($begin+$show_page_num>$pages_num)?$pages_num+1:$begin+$show_page_num;
for($i=$begin; $i<$end; $i++) {
$nav .=($page!=$i)?" <a href='?$param&page=$i' title='第{$i}页'>$i</a> ":" <span style='font-size:12pt;'>$i</span> ";
}
if($page<$pages_num) $nav .= " <a href='?$param&page=".($page+1)."' title='第".($page+1)."页'>下一页 »</a> ";
if($end!=$pages_num+1) $nav .= " ... <a href='?$param&page=$pages_num' title='第{$pages_num}页'>最后页 »</a> ";
break;
/* 玩转手机所用下拉 */
case 'nav4':
if($show_page_num) $this->show_page_num = $show_page_num;
$page = $this->page;
$show_page_num = $this->show_page_num;
$pages_num = $this->pages_num;
$param = $this->params;
if (!$pages_num) $pages_num =1;
$nav = "<a href='?$param' title='第1页'><font face=webdings>9</font></a> ";
if ($page>1) {
$nav .="<a href='?$param&page=".($page-1)."' title='第".($page-1)."页'><font face=webdings>7</font></a> ";
}else {
$nav .= "<font face=webdings>7</font> ";
}
if ($page<=2||$pages_num<$show_page_num) {
$begin=1;
} elseif ($page>$pages_num-$show_page_num+2) {
$begin = $pages_num-$show_page_num+1;
}else {
$begin = $page-2;
}
if ($pages_num<$show_page_num) {
$end =$pages_num;
}else {
$end = $begin+$show_page_num-1;
}
/*if ($pages_num<$show_page_num) {
$end = $pages_num;
}elseif ($page<=$show_page_num){
$end = $show_page_num ;
}elseif(($page<=$pages_num&&$page+$show_page_num-2-1>$pages_num)) {
$end = $pages_num;
}elseif ($page>2) {
$end = $page+($show_page_num-2-1);
}*/
//$nav.="[ ";
for ($i=$begin;$i<=$end;$i++) {
$nav .=($page!=$i)?"<a href='?$param&page=$i' title='第{$i}页' class=nav> $i </a> ":"<font color='#000000'><b> <U>$i</U> </b></font> ";
}
//$nav .=" ] ";
if ($page<$pages_num) {
$nav .="<a href='?$param&page=".($page+1)."' title='第".($page+1)."页'><font face=webdings>8</font></a> ";
}else {
$nav .= "<font face=webdings>8</font> ";
}
$nav .="<a href='?page=$pages_num&$param' title='尾页'><font face=webdings>:</font></a> <b>共<font color='#74A2DE'>".$pages_num."</font>页</b>";
break;
/*下拉框直接跳转 */
case 'listjump':
$nav = '
第 <select οnchange="location.href=/'?'.$this->params.'&page=/'+this.value;">
<script language="JavaScript/">
<!--
for(i=1; i<='.$this->pages_num.'; i++) {
document.write("<option value="+i+(i=='.$this->page.'?" selected":"")+">"+i+"</option>");
}
//-->
</script>
</select> 页';
break;
case 'inputjump':
return "<script language='javascript'>function pagejump(){if (document.all.pagejmp.value == ''|| document.all.pagejmp.value < 0 ) {document.all.pagejmp.focus();alert('请输入跳转页码!');return false;}else{this.location.href = '?page='+document.all.pagejmp.value+'&".$this->params."'; target = '_self';}}</script> 转到第 <input name=pagejmp size=2 οnkeydοwn='if(window.event.keyCode==13) pagejump();'> 页 <img src=".gd('user')."images/go1.gif align=absmiddle οnclick='pagejump();' style='cursor:hand;'>";
break;
case 'imagejump':
return "<script language='javascript'>function pagejump(){if (document.all.pagejmp.value == ''|| document.all.pagejmp.value < 0 ) {document.all.pagejmp.focus();alert('请输入跳转页码!');return false;}else{this.location.href = '?page='+document.all.pagejmp.value+'&".$this->params."'; target = '_self';}}</script> 转到第 <input name=pagejmp size=4 οnkeydοwn='if(window.event.keyCode==13) pagejump();' style='border:1px solid #424242; height:16px;'> 页 <img src=".gd('magzine')."images/go.gif align=absmiddle οnclick='pagejump();' style='cursor:hand;' width=25 height=17>";
break;
default:
$nav = '';
}
return $nav;
}
function xmlnav(&$xml,$type='nav1') {
switch($type) {
case 'nav1':
if ($this->page > 1) {
$xml->setAttrib('first','yes');
}else {
$xml->setAttrib('first','no');
}
if ($this->page < $this->pages_num) {
$xml->setAttrib('last','yes');
}else {
$xml->setAttrib('last','no');
}
$xml->addElement('previous',$this->page-1);
$xml->addElement('next',$this->page+1);
break;
}
}
/* 当前页/总页数 输出 */
function pos($style=1){
switch($style) {
case 1:
return "页次:".$this->page.'/'.$this->pages_num."页";
break;
case 2:
return "(".$this->page.'/'.$this->pages_num." 页)";
break;
default:
return false;
}
}
/* 链接参数转换 */
function param($param,$filter='') {
if(is_array($filter)) {
$filter[] = 'page';
}else {
$filter = array($filter,'page');
}
$filter = array_unique($filter);
foreach($param as $key=>$val) {
if(!in_array($key,$filter)) {
if(is_array($val)) {
foreach($val as $key1=>$val1) {
$prm .= urlencode($key.'['.$key1.']').'='.urlencode($val1).'&';
}
}else {
$prm .= urlencode($key).'='.urlencode($val).'&';
}
}
}
$this->params = $prm;
return $prm;
}
///
///以下内容为整合atop 的数据库类
insertbyArray /
将数组内的值,插入到数据库中去
/*
第一个参数为插入数据,第二个参数为插入模式。
当模式为1 时,数组为索引数组,是将数据库的字段依次读出来,做为插入条件。
当模式为2 时,数组为键值索引。
*/
function insertbyArray($dataArray,$mod = 1)
{
$this->mod = $mod;
echo $this->mod;
switch ($this->mod)
{
case(1):
$fields = mysql_list_fields($this->database, $this->table);
$len = mysql_num_fields($fields);
$sql = "insert into $this->table(";
for($j = 0;$j<$len;$j++)
{
$fields_name[$j] = mysql_field_name($fields, $j);
$sql .= ($j == $len-1) ?$fields_name[$j].") values(": $fields_name[$j].",";
}
for($j = 0;$j <$len;$j++)
{
$sql .= ($j == $len-1) ?"'$dataArray[$j]' )": "'$dataArray[$j]',";
}
break;
case(2):
$cond1 = array();
$cond2 = array();
foreach($dataArray as $key => $val)
{
$cond1[]= $key;
$cond2[]= "'$val'";
}
$cond1_str = implode(",",$cond1);
$cond2_str = implode(",",$cond2);
$sql = "insert into $this->table ($cond1_str) value( $cond2_str)";
break;
}
// $this->query($sql);
echo $sql."<hr>";
echo "测试阶段,暂未开通执行。正确后请联系db类管理员:";
}
updatebyArray /
根据数组的值,来更新数据
/*
第一个参数为插入数据,第二个参数为插入模式。
当模式为1 时,数组为索引数组,是将数据库的字段依次读出来,做为更新条件。
当模式为2 时,数组为键值索引。条件直接从数组来生成出来。
*/
function updatebyArray($dataArray,$mod=1,$cond="")
{
$this->mod = $mod;
switch ($this->mod)
{
case(1):
$fields = mysql_list_fields($this->database, $this->table);
$len = mysql_num_fields($fields);
$sql = "update $this->table set ";
for($j = 0;$j<$len;$j++)
{
$fields_name[$j] = mysql_field_name($fields, $j);
$sql .= ($j == $len-1) ?$fields_name[$j]."= '$dataArray[$j]'": $fields_name[$j]."='".$dataArray[$j]."',";
}
break;
case(2):
$cond_me = array();
$sql = "update $this->table set";
foreach($dataArray as $key => $val)
{
$cond_me[] = " $key = '$val'";
}
$cond_str = implode(",",$cond_me);
$sql .= $cond_str;
break;
}
if($cond)
{
$sql .= " where $cond";
}
else
{
echo "本类不支持无条件更新<FONT COLOR ='RED'> all right reserved by xuxing</FONT>";
exit();
}
echo $sql."<hr/>";
echo "测试阶段,暂未开通执行。正确后请联系db类管理员:";
}
del byArray /
根据条件生成删除的值。
function del($cond='')
{
if($cond)
$sql = "delete from $this->table where $cond";
else
{
echo "本类不支持无条件删除<FONT COLOR ='RED'> all right reserved by xuxing</FONT>";
exit();
}
echo $sql."<hr/>";
echo "测试阶段,暂未开通执行。正确后请联系db类管理员:";
}
}
function db_init() {
global $db;
$db = new db();
$db->conn();
$db->setdb();
}
db_init();
$arr1 = array ("0"=>"23","1"=>"xuxing","2"=>86,"3"=>$_SERVER['REMOTE_ADDR'],"4"=>"回复","5"=>date("Y-m-d H:i:s"));
$arr2 = array("username"=>"xuxing","cid"=>86,"ip"=>$_SERVER['REMOTE_ADDR'],"content"=>"回复内容","createtime"=>date("Y-m-d H:i:s"));
$db->mod = 2;
$db->table = "comment";
$sql = "select * from comment where id >2";
$ra = $db->rn($sql,'field');
?>