请教高手关于mysql_data_seek分页的问题

zeoyeah 2010-07-26 03:47:10
初学PHP,在网上搜索了一下mysql_data_seek的用法,也大概知道了原理,但是实际做分页遇到一个坎,怎么也过不去。
我页面分页包括参数都已经做好了,就是显示记录的时候不灵,用下面这个语句出现的结果是:越到后面的页,记录数越少。
mysql_data_seek($result,($page-1)*$pagesize);

请教高手帮忙。谢谢。
...全文
138 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
helloyou0 2010-07-27
  • 打赏
  • 举报
回复
while循环里没看见对每页的记录数有控制?

BTW: 你这样做一样是每次都要查询数据库的,而且每次都是全部取出。。。。
所以还是用limit吧
zeoyeah 2010-07-27
  • 打赏
  • 举报
回复
$result是当前分页的数据记录
$result1是总记录数用于计算页数
zeoyeah 2010-07-27
  • 打赏
  • 举报
回复
130行:mysql_data_seek($result,($page-1)*$pagesize);
zeoyeah 2010-07-27
  • 打赏
  • 举报
回复
我已经加多一个SQL语句查总记录数,但现在只要分页就有一个报错:
Warning: mysql_data_seek() [function.mysql-data-seek]: Offset 60 is invalid for MySQL result index 64 (or the query data is unbuffered) in D:\php\website\Web_en\product_list.php on line 130
zeoyeah 2010-07-26
  • 打赏
  • 举报
回复
<table id="table_content" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td width="220px" align="center" valign="top">
<?
include 'inc/product_list_left.php';
?>
</td>
<td width="10px"></td>
<td id="workarea" valign="top">
<table width="100%" border="1" cellspacing="0" cellpadding="2" bordercolordark="#FFFFFF" bordercolorlight="#cccccc">
<?
$pagesize=15;
if(empty($_GET['page'])){
$page=1;
}else{
$page=intval($_GET['page']);
}
$startrow=($page-1)*$pagesize;

if (strtoupper($_GET['key1'])=="" and strtoupper($_GET['key2'])=="" and strtoupper($_GET['key3'])=="" and strtoupper($_GET['key4'])==""){
$sql = "select product_info.product_id, product_info.product_name, product_info.input, product_info.output, product_info.category, product_info.category0, product_info.category1, product_info.category2, product_info.category3, product_info.image_path, product_attachment.path from product_info,product_attachment where product_info.product_id like product_attachment.product_id order by rand() limit 15";
}else{
if (strtoupper($_GET['key1'])<>""){
$sql = "select product_info.product_id, product_info.product_name, product_info.input, product_info.output, product_info.category, product_info.category0, product_info.category1, product_info.category2, product_info.category3, product_info.image_path, product_attachment.path from product_info,product_attachment where product_info.category0 like '".$_GET['key1']."' and product_info.product_id like product_attachment.product_id order by order_by desc";
if (strtoupper($_GET['key2'])<>"")
$sql = "select product_info.product_id, product_info.product_name, product_info.input, product_info.output, product_info.category, product_info.category0, product_info.category1, product_info.category2, product_info.category3, product_info.image_path, product_attachment.path from product_info,product_attachment where product_info.category1 like '".$_GET['key2']."' and product_info.product_id like product_attachment.product_id order by order_by desc";
if (strtoupper($_GET['key3'])<>"")
$sql = "select product_info.product_id, product_info.product_name, product_info.input, product_info.output, product_info.category, product_info.category0, product_info.category1, product_info.category2, product_info.category3, product_info.image_path, product_attachment.path from product_info,product_attachment where product_info.category like '".$_GET['key3']."' and product_info.product_id like product_attachment.product_id order by order_by desc";
if (strtoupper($_GET['key4'])<>"")
$sql = "select product_info.product_id, product_info.product_name, product_info.input, product_info.output, product_info.category, product_info.category0, product_info.category1, product_info.category2, product_info.category3, product_info.image_path, product_attachment.path from product_info,product_attachment where product_info.category2 like '".$_GET['key4']."' and product_info.product_id like product_attachment.product_id order by order_by desc";
}
}

$conn=mysql_connect($mysql_server_name,$mysql_username,$mysql_password);//mysql连线
$result=mysql_db_query($mysql_database,$sql,$conn);//对指定的资料库进行查询
$row=mysql_fetch_row($result);

$totalnum=mysql_num_rows($result);
$totalpage=ceil($totalnum/$pagesize);

//页码计算:
$lastpg=$totalpage; //最后页,也是总页数
$page=min($lastpg,$page);
if($page-1<=0){
$prepg=1;
}else{
$prepg=$page-1;
} //上一页
$nextpg=($page==$lastpg ? 0 : $page+1); //下一页
$firstcount=($page-1)*$pagesize;
$url=$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];

$parse_url=parse_url($url);
$url_query=$parse_url["query"];

if($url_query){
//因为URL中可能包含了页码信息,我们要把它去掉,以便加入新的页码信息。
//这里用到了正则表达式
$url_query=ereg_replace("(^|&)page=$page","",$url_query);
//将处理后的URL的查询字串替换原来的URL的查询字串:
$url=str_replace($parse_url["query"],$url_query,$url);
}

echo "<tr><td colspan=5>From: ".($totalnum?($firstcount+1):0)." to ".min($firstcount+$pagesize,$totalnum).", Total:$totalnum.</td></tr>";
?>
<tr align="center" bgcolor="#eeeeee" class="ibm-price">
<td><span class="inleft1">Series</span></td>
<td><span class="inleft1">Input Voltage </span></td>
<td><span class="inleft1">Output voltage </span></td>
<td><span class="inleft1">File</span></td>
<td><span class="inleft1">Picture</span></td>
</tr>
<?
if ($row)
{
//将资料移动回第一笔
mysql_data_seek($result,($page-1)*$pagesize);
while($row=mysql_fetch_row($result))
{
?>
<tr>
<td><? echo($row['1']); ?> </td>
<td><? echo($row['2']); ?>  </td>
<td><? echo($row['3']); ?>  </td>
<td align="center"><a href="images<? echo($row['10']); ?>" target="_blank">View</a></td>
<td align="center"><img src="images<? echo($row['9']); ?>" width="120"></td>
</tr>
<?
}
}
else
{
echo("<tr><td colspan=5>No visible Product.</td></tr>");
}
?>
</table>
<div style="text-align:right; padding-right:20px; " class="pagination">
<?
if($lastpg >1){

if($page!=1){
echo("<a href=http://".$url."&page=".$prepg." class=prev>< Previous</a>");
}else{
echo("<span class=invalid>< Previous</span>");
}
for($i=1;$i<=$totalpage;$i++){
if($i==$page)
echo ("<span class=thispage>".$i."</span>");
else
echo ("<a href=http://".$url."&page=".$i." class=begin>".$i."</a>");
}
if($page==$totalpage){
echo("<span class=invalid>Next ></span>");
}else{
echo("<a href=http://".$url."&page=".$nextpg." class=next>Next ></a>");
}
}
?>
</div>
<p> </p>
</td>
</tr></table>
zeoyeah 2010-07-26
  • 打赏
  • 举报
回复
没有方法把记录数查出来以后,把$result 分段显示?
tbraz 2010-07-26
  • 打赏
  • 举报
回复
路过学习了……
zeoyeah 2010-07-26
  • 打赏
  • 举报
回复
对,因为我的SQL语句比较复杂,所以就一次性把记录全查出来了。
Dleno 2010-07-26
  • 打赏
  • 举报
回复
每次分页都要查询数据库。

select * from tablename where **** order by ** limit ($page-1)*$pagesize,$pagesize;
这只会查询出当前的记录,而不会都查出来。
你似乎把所有数据都查出来了
zeoyeah 2010-07-26
  • 打赏
  • 举报
回复
但是不是经常要查询数据库?
Dleno 2010-07-26
  • 打赏
  • 举报
回复
分页应该是:
select * from tablename where **** order by ** limit ($page-1)*$pagesize,$pagesize;
zeoyeah 2010-07-26
  • 打赏
  • 举报
回复
我没有采用改变数据库查询条件的方法
DB类<?php header('Content-Type:text/html; charset=utf-8'); basename($_SERVER['PHP_SELF'])=='mysql.inc.php'&&header; ('Location:http://'.$_SERVER['HTTP_HOST']); //禁止直接访问本页 /** ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ ※※※※※※※※ 【文件名】: mysql.inc.php 【作 用】: mysql数据库操作类 【作 者】: Riyan 【版 本】: version 2.0 【修改日期】: 2010/02/11 ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ ※※※※※※※※ **/ class mysql{ private $host; // 数据库主机 private $user; // 数据库用户名 private $pass; // 数据库密码 private $data; // 数据库名 private $conn; // 数据库连接标识 private $sql; // sql语句 private $code; // 数据库编码,GBK,UTF8,GB2312 private $result; // 执行query命令的结果数据集 private $errLog=true; // 是否开启错误日志,默认开启 private $showErr=true; // 显示所有错误,具有安全隐患,默认开启 private $pageNo=1; // 当前页 private $pageAll=1; // 总页数 private $rsAll=0; // 总记录 private $pageSize=10; // 每页显示记录条数 /****************************************************************** -- 函数名:__construct($host,$user,$pass,$data,$code,$conn) -- 作 用:构造函数 -- 参 数:$host 数据库主机地址(必填) $user 数据库用户名(必填) $pass 数据库密码(必填) $data 数据库名(必填) $conn 数据库连接标识(必填) $code 数据库编码(必填) -- 返回值:无 -- 实 例:无 *******************************************************************/ public function __construct($host,$user,$pass,$data,$code='utf8', $conn='conn'){ $this->host=$host; $this->user=$user; $this->pass=$pass; $this->data=$data; $this->conn=$conn; $this->code=$code; $this->connect(); } public function __get($name){return $this->$name;} public function __set($name,$value){$this->$name=$value;} // 数据库连接 private function connect(){ if ($this->conn=='pconn') $this->conn=mysql_pconnect($this- >host,$this->user,$this->pass); // 永久链接 else $this->conn=mysql_connect($this->host,$this->user,$this- >pass); // 临时链接 if (!$this->conn) $this->show_error('无法连接服务器'); $this->select_db($this->data); $this->query('SET NAMES '.$this->code); $this->query("SET CHARACTER_SET_CLIENT='{$this->code}'"); $this->query("SET CHARACTER_SET_RESULTS='{$this->code}'"); } // 数据库选择 public function select_db($data){ $result=mysql_select_db($data,$this->conn); if (!$result) $this->show_error('无法连接数据库'.$data); return $result; } /****************************************************************** -- 函数名:get_info($num) -- 作 用:取得 MySQL 服务器信息 -- 参 数:$num 信息值(选填) -- 返回值:字符串 -- 实 例:无 *******************************************************************/ public function get_info($num){ switch ($num){ case 1: return mysql_get_server_info(); // 取得 MySQL 服务器信息 break; case 2: return mysql_get_host_info(); // 取得 MySQL 主机信息 break; case 3: return mysql_get_proto_info(); // 取得 MySQL 协议信息 break; default: return mysql_get_client_info(); // 取得 MySQL 客户端信息 } } /****************************************************************** -- 函数名:query($sql) -- 作 用:数据库执行语句,可执行查询添加修改删除等任何sql语句 -- 参 数:$sql sql语句(必填) -- 返回值:布尔 -- 实 例:无 *******************************************************************/ public function query($sql){ if (empty($sql)) $this->show_error('SQL语句为空'); $this->sql=preg_replace('/ {2,}/',' ',trim($sql)); $this->result=mysql_query($this->sql,$this->conn); if (!$this->result) $this->show_error('SQL语句有误',true); return $this->result; } /****************************************************************** -- 函数名:create_db($data) -- 作 用:创建添加新的数据库 -- 参 数:$data 数据库名称(必填) -- 返回值:字符串 -- 实 例:无 *******************************************************************/ public function create_database($data=''){$this->query("CREATE DATABASE {$data}");} // 查询服务器所有数据库 public function show_database(){ $this->query('SHOW DATABASES'); $db=array(); while ($row=$this->fetch_array()) $db[]=$row['Database']; return $db; } // 查询数据库下所有的表 public function show_tables($data=''){ if (!empty($data)) $db=' FROM '.$data; $this->query('SHOW TABLES'.$data); $tables=array(); while ($row=$this->fetch_row()) $tables[]=$row[0]; return $tables; } /****************************************************************** -- 函数名:copy_tables($tb1,$tb2,$where) -- 作 用:复制表 -- 参 数:$tb1 新表名(必填) $tb2 待复制表的表名(必填) $Condition 复制条件(选填) -- 返回值:布尔 -- 实 例:无 *******************************************************************/ public function copy_tables($tb1,$tb2,$Condition=''){$this->query ("SELECT * INTO `{$tb1}` FROM `{$tb2}` {$Condition}");} /****************************************************************** -- 函数名:Get($Table,$Fileds,$Condition,$Rows) -- 作 用:查询数据 -- 参 数:$Table 表名(必填) $Fileds 字段名,默认为所有(选填) $Condition 查询条件(选填) $Rows 待查询记录条数,为0表示不限制(选填) -- 返回值:布尔 -- 实 例:$DB->Get('mydb','user,password','order by id desc',10) *******************************************************************/ public function Get($Table,$Fileds='*',$Condition='',$Rows=0){ if (!$Fileds) $Fileds='*'; if ($Rows>0) $Condition.=" LIMIT 0,{$Rows}"; $sql="SELECT {$Fileds} FROM `{$Table}` {$Condition}"; return $this->query($sql); } // 只查询一条记录 public function GetRs($Table,$Fileds='*',$Condition=''){ if (!$Fileds) $Fileds='*'; $this->query("SELECT {$Fileds} FROM `{$Table}` {$Condition} LIMIT 0,1"); return $this->fetch_array(); } /****************************************************************** -- 函数名:Add($Table,$Data) -- 作 用:添加数据 -- 参 数:$Table 表名(必填) $Data 待添加数据,可以为数组(必填) -- 返回值:布尔 -- 实 例:$DB->Add('mydb',array ('user'=>'admin','password'=>'123456','age'=>'18') 数组类型 $DB->Add('mydb','user=admin,password=123456,age=18') 字符 串类型 *******************************************************************/ public function Add($Table,$Data){ if (!is_array($Data)){ $arr=explode(',',$Data); $Data=array(); foreach ($arr as $val){ list($key,$val)=explode('=',$val); if (!$val) $val=''; $Data[$key]=$val; } } $Fileds='`'.implode('`,`',array_keys($Data)).'`'; $Value="'".implode("','",array_values($Data))."'"; return $this->query("INSERT INTO `{$Table}` ({$Fileds}) VALUES ({$Value})"); } /****************************************************************** -- 函数名:Set($Table,$Data,$Condition,$unQuot) -- 作 用:更改数据 -- 参 数:$Table 表名(必填) $Data 待更改数据,可以为数组(必填) $Condition 更改条件(选填) $unQuot 不需要加引号的字段,用于字段的加减运算等情况,多个 字段用,分隔或者写入一个数组(选填) -- 返回值:布尔 -- 实 例:$DB->Set('mydb',array ('user'=>'admin','password'=>'123456','WHERE id=1') 数组类型 $DB->Set('mydb',"user='admin',password='123456'",'WHERE id=1') 字符串类型 *******************************************************************/ public function Set($Table,$Data,$Condition='',$unQuot=''){ if (is_array($Data)){ if (!is_array($unQuot)) $unQuot=explode(',',$unQuot); foreach ($Data as $key=>$val){ $arr[]=$key.'='.(in_array($key,$unQuot)?$val:"'$val'"); } $Value=implode(',',$arr); }else $Value=$Data; return $this->query("UPDATE `{$Table}` SET {$Value} {$Condition}"); } /****************************************************************** -- 函数名:Del($Table,$Condition) -- 作 用:删除数据 -- 参 数:$Table 表名(必填) $Condition 删除条件(选填) -- 返回值:布尔 -- 实 例:$DB->Del('mydb','id=1') *******************************************************************/ public function Del($Table,$Condition=''){return $this->query ("DELETE FROM `{$Table}`".($Condition?" WHERE {$Condition}":''));} // 取得结果数据 public function result($result=''){ if (empty($result)) $result=$this->result; if ($result==null) $this->show_error('未获取到查询结果',true); return mysql_result($result); } /****************************************************************** -- 函数名:fetch_array($Table,$Condition) -- 作 用:根据从结果集取得的行生成关联数组 -- 参 数:$result 结果集(选填) $type 数组类型,可以接受以下值:MYSQL_ASSOC,MYSQL_NUM 和 MYSQL_BOTH(选填) -- 返回值:布尔 -- 实 例:$DB->Del('mydb','id=1') *******************************************************************/ public function fetch_array($result='',$type=MYSQL_BOTH){ if (empty($result)) $result=$this->result; if (!$result) $this->show_error('未获取到查询结果',true); return mysql_fetch_array($result,$type); } // 获取关联数组,使用$row['字段名'] public function fetch_assoc($result=''){ if (empty($result)) $result=$this->result; if (!$result) $this->show_error('未获取到查询结果',true); return mysql_fetch_assoc($result); } // 获取数字索引数组,使用$row[0],$row[1],$row[2] public function fetch_row($result=''){ if (empty($result)) $result=$this->result; if (!$result) $this->show_error('未获取到查询结果',true); return mysql_fetch_row($result); } // 获取对象数组,使用$row->content public function fetch_obj($result=''){ if (empty($result)) $result=$this->result; if (!$result) $this->show_error('未获取到查询结果',true); return mysql_fetch_object($result); } // 取得上一步 INSERT 操作产生的 ID public function insert_id(){return mysql_insert_id();} // 指向确定的一条数据记录 public function data_seek($id){ if ($id>0) $id=$id-1; if (!mysql_data_seek($this->result,$id)) $this->show_error('指定 的数据为空'); return $this->result; } /****************************************************************** 函数名:num_fields($result) 作 用:查询字段数量 参 数:$Table 数据库表名(必填) 返回值:字符串 实 例:$DB->num_fields("mydb") *******************************************************************/ public function num_fields($result=''){ if (empty($result)) $result=$this->result; if (!$result) $this->show_error('未获取到查询结果',true); return mysql_num_fields($result); } // 根据select查询结果计算结果集条数 public function num_rows($result=''){ if (empty($result)) $result=$this->result; $rows=mysql_num_rows($result); if ($result==null){ $rows=0; $this->show_error('未获取到查询结果',true); } return $rows>0?$rows:0; } // 根据insert,update,delete执行结果取得影响行数 public function affected_rows(){return mysql_affected_rows();} // 获取地址栏参数 public function getQuery($unset=''){ //$unset表示不需要获取的参数, 多个参数请用,分隔(例如:getQuery('page,sort')) if (!empty($unset)){ $arr=explode(',',$unset); foreach ($arr as $val) unset($_GET[$val]); } foreach ($_GET as $key=>$val) $list[]=$key.'='.urlencode($val); return is_array($list)?implode('&',$list):''; } /****************************************************************** 函数名:getPage($Table,$Fileds,$Condition,$pageSize) 作 用:获取分页信息 参 数:$Table 表名(必填) $Fileds 字段名,默认所有字段(选填) $Condition 查询条件(选填) $pageSize 每页显示记录条数,默认10条(选填) 返回值:字符串 实 例:无 *******************************************************************/ public function getPage($Table,$Fileds='*',$Condition='', $pageSize=10){ if (intval($pageSize)>0){$this->pageSize=intval($pageSize);} if (isset($_GET['page']) && intval($_GET['page'])){$this- >pageNo=intval($_GET['page']);} if (empty($Fileds)){$Fileds='*';} $sql="SELECT * FROM `{$Table}` {$Condition}"; $this->query($sql); $this->rsAll=$this->num_rows(); if ($this->rsAll>0){ $this->pageAll=ceil($this->rsAll/$this->pageSize); if ($this->pageNopageNo=1;} if ($this->pageNo>$this->pageAll){$this->pageNo=$this- >pageAll;} $sql="SELECT {$Fileds} FROM `{$Table}` {$Condition}".$this- >limit(true); $this->query($sql); } return $this->rsAll; } // 构造分页limit语句,和getPage()函数搭配使用 public function limit($str=false){ $n=($this->pageNo-1)*$this->pageSize; return $str?' LIMIT '.$n.','.$this->pageSize:$n; } // 显示分页,必须和getPage()函数搭配使用 public function showPage($number=true){ $pageBar=''; if ($this->pageAll>1){ $pageBar.=''.chr(10); $url=$this->getQuery('page'); $url=empty($url)?'?page=':'?'.$url.'&page;='; if ($this->pageNo>1){ $pageBar.='首页'.chr (10); $pageBar.='pageNo-1).'">上页 '.chr(10); }else{ $pageBar.='首页'.chr (10); $pageBar.='上页'.chr (10); } if ($number){ $arr=array(); if ($this->pageAll<6){ for ($i=0;$ipageAll;$i++) $arr[]=$i+1; }else{ if ($this->pageNopageNopageAll&&$this- >pageNo>($this->pageAll-3)) for ($i=1;$ipageAll-5+$i; else for ($i=1;$ipageNo-3+$i; } foreach ($arr as $val){ if ($val==$this->pageNo) $pageBar.=''.$val.''.chr(10); else $pageBar.=''. $val.''.chr(10); } } if ($this->pageNopageAll){ $pageBar.='pageNo+1).'">下页 '.chr(10); $pageBar.='pageAll.'">尾页 '.chr(10); }else{ $pageBar.='下页'.chr (10); $pageBar.='尾页'.chr (10); } $pageBar.=''; $pageBar.="页次:{$this->pageNo}/{$this->pageAll} {$this- >pageSize}条/页 总记录:{$this->rsAll} 转到:"; $pageBar.="<input id=\"page\" value=\"{$this->pageNo}\" type=\"text\" onblur=\"goPage('{$url}',{$this->pageAll});\" />"; $pageBar.=''.chr(10); } echo $pageBar; } // 获得客户端真实的IP地址 public function getip(){ if ($_SERVER['HTTP_X_FORWARDED_FOR']) return $_SERVER ['HTTP_X_FORWARDED_FOR']; elseif ($_SERVER['HTTP_CLIENT_IP']) return $_SERVER ['HTTP_CLIENT_IP']; elseif ($_SERVER['REMOTE_ADDR']) return $_SERVER['REMOTE_ADDR']; elseif (getenv('HTTP_X_FORWARDED_FOR')) return getenv ('HTTP_X_FORWARDED_FOR'); elseif (getenv('HTTP_CLIENT_IP')) return getenv ('HTTP_CLIENT_IP'); elseif (getenv('REMOTE_ADDR')) return getenv('REMOTE_ADDR'); else return ''; } /****************************************************************** -- 函数名:show_error($message,$sql) -- 作 用:输出显示错误信息 -- 参 数:$msg 错误信息(必填) $sql 显示错误的SQL语句,在SQL语句错误时使用(选填) -- 返回值:字符串 -- 实 例:无 *******************************************************************/ public function show_error($msg='',$sql=false){ $err='['.mysql_errno().']'.mysql_error(); if ($sql) $sql='SQL语句:'.$this->sql; if ($this->errLog){ $dirs='error/'; //设置错误日志保存目录 $fileName=date('Y-m-d').'.log'; $filePath=$dirs.$fileName; if (!is_dir($dirs)){ $dirs=explode('/',$dirs); $temp=''; foreach($dirs as $dir){ $temp.=$dir.'/'; if (!is_dir($temp)){ mkdir($temp,0777) or die('__无法建立目录'. $temp.',自动取消记录错误信息'); } } $filePath=$temp.$fileName; } $text="错误事件:".$msg."\r\n错误原因:".$err."\r\n".($sql? $sql."\r\n":'')."客户端IP:".$this->getip()."\r\n记录时间:".date('Y-m-d H:i:s')."\r\n\r\n"; $log='错误日志:__'.(error_log($text,3,$filePath)?'此错误信 息已被自动记录到日志'.$fileName:'写入错误信息到日志失败'); } if ($this->showErr){ echo ' 错误信息提示 错误事件:'.$err.' 错误原因:'.$msg.' '.$sql.' '.$log.' '; exit(); } } /****************************************************************** -- 函数名:drop($table) -- 作 用:删除表(请慎用,无法恢复) -- 参 数:$table 要删除的表名,默认为所有(选填) -- 返回值:无 -- 实 例:$DB->drop('mydb') *******************************************************************/ public function drop($table){ if ($table){ $this->query("DROP TABLE IF EXISTS `{$table}`"); }else{ $rst=$this->query('SHOW TABLES'); while ($row=$this->fetch_array()){ $this->query("DROP TABLE IF EXISTS `{$row[0]}`"); } } } /****************************************************************** -- 函数名:makeSql($table) -- 作 用:从数据表读取信息并生成SQL语句 -- 参 数:$table 待读取的表名(必填) -- 返回值:字符串 -- 实 例:无 *******************************************************************/ public function makeSql($table){ $result=$this->query("SHOW CREATE TABLE `{$table}`"); $row=$this->fetch_row($result); $sqlStr=''; if ($row){ $sqlStr.="-- ---------------------------------------------------------------\r\n"; $sqlStr.="-- Table structure for `{$table}`\r\n"; $sqlStr.="-- ---------------------------------------------------------------\r\n"; $sqlStr.="DROP TABLE IF EXISTS `{$table}`;\r\n{$row[1]};\r \n"; $this->Get($table); $fields=$this->num_fields(); if ($this->num_rows()>0){ $sqlStr.="\r\n"; $sqlStr.="-- ---------------------------------------------------------------\r\n"; $sqlStr.="-- Records of `{$table}`\r\n"; $sqlStr.="-- ---------------------------------------------------------------\r\n"; while ($row=$this->fetch_row()){ $comma=''; $sqlStr.="INSERT INTO `{$table}` VALUES ("; for($i=0;$isaveSql('../mydb.sql'); *******************************************************************/ public function saveSql($sqlPath='',$table=''){ if (empty($table)){ $result=$this->query('SHOW TABLES'); while ($arr=$this->fetch_row($result)){ $str=$this->makeSql($arr[0]); if (!empty($str)) $sql.=$str; } $text="/*************************************************************** \\r\\n"; $text.="-- Database: $this->data\r\n"; $text.="-- Date Created: ".date('Y-m-d H:i:s')."\r\n"; $text.="***************************************************************/ \r\n\r\n"; }else{ $text=''; $sql=$this->makeSql($table); } if (empty($sql)) return false; $text.=$sql; $dir=dirname($sqlPath); $file=basename($sqlPath); if (empty($file)) $file=date('YmdHis').'.sql'; $sqlPath=$dir.'/'.$file; if (!empty($dir)&&!is_dir($dir)){ $path=explode('/',$dir); $temp=''; foreach ($path as $dir){ $temp.=$dir.'/'; if (!is_dir($temp)){ if (!mkdir($temp,0777)) return false; } } $sqlPath=$temp.$file; } $link=fopen($sqlPath,'w+'); if (!is_writable($sqlPath)) return false; return fwrite($link,$text); fclose($link); } /****************************************************************** -- 函数名:loadSql($filePath) -- 作 用:从SQL文件导入信息到数据库 -- 参 数:$filePath SQL文件路径(必填) -- 返回值:字符串 -- 实 例:无 *******************************************************************/ public function loadSql($filePath){ $val=$this->readSql($filePath); if ($val==false) $this->show_error($filePath.'不存在'); elseif (empty($val)) $this->show_error($filePath.'中无有效数 据'); else{ $errList=''; foreach ($val as $sql){ $result=mysql_query($sql); if (!$result) $errList.='执行语句'.$sql.'失败'; } return $errList; } return false; } // 释放结果集 public function free(){mysql_free_result($this->result);} // 关闭数据库 public function close(){mysql_close($this->conn);} // 析构函数,自动关闭数据库,垃圾回收机制 public function __destruct(){ $this->free(); $this->close(); } } ?>

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧