2019-06-06 回答
站长注:一个存储过程是一个可编程的函数,当希望在不同的应用程序或者平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的!
以下是详细代码:
<meta charset=’utf-8′>
<?php
$host=”localhost”;
$user=”root”;
$pwd=”root”;
$dbname=”test”;
$link = mysql_connect($host, $user, $pwd)or die(“could not connect: ” . mysql_error());
mysql_select_db($dbname, $link) or die (‘can\’t use test : ‘ . mysql_error());
mysql_query(“set names ‘utf8′”);
mysql_query(“set character_set_client=utf8″);
mysql_query(“set character_set_results=utf8″);
//检查存储过程是否已经存在
$procedure_check=”show create procedure total_users”;
$is_exist=mysql_query($procedure_check);
$procedure_check2=”show create procedure page_users”;
$is_exist2=mysql_query($procedure_check2);
if(!$is_exist){
//由于存储过程执行一次后,只要没有drop掉就始终存在,所以对于
//查询总量的存储过程来说只需要声明一次就可以,如果已经存在就不重复声明
//声明检索总用户数的存储过程
$sql_total=”
#basic stored procedure example
create procedure total_users(out total int(10))
begin
select count(*) into total from user;
end
“;
mysql_query($sql_total);
}
//调用存储过程
mysql_query(“call total_users(@total_num);”);
$total_res=mysql_query(“select @total_num”);
//获取用户总数
$total_num=mysql_fetch_array($total_res);
//获取当前页
$page=$_request['page']?$_request['page']:1;
//设置每页显示多好条记录
$page_size=2;
//设置limit偏量
$off=($page-1)*$page_size;
//计算页面总数,注意键名,当然你也可以使用数字下标
$page_num=ceil($total_num['@total_num']/$page_size);
if(!$is_exist2){
//同上,只需要声明一次
//检索分页用户数的存储过程,这里传入2个参数,都是整型
$sql_page=”
#basic stored procedure example
create procedure page_users(in off int(10),in page_size int(10))
begin
select * from user limit off,page_size;
end
“;
//建立存储过程
$is_procedure=mysql_query($sql_page);
}
//调用分页存储过程,传递参数
$res=mysql_query(“call page_users($off,$page_size)”);
while ($arr=mysql_fetch_array($res,mysql_assoc)){
echo ‘id:’.$arr['id'].’<br>’;
echo ‘user:’.$arr['user'];
echo ‘<hr>’;
}
//显示分页
for($i=1;$i<=$page_num;$i++){
echo ‘<a href=”?page=’.$i.’”>['.$i.']</a>’;
}
?>
———–复制下面的sql语句到phpmyadmin执行以生成测试数据———-
– phpmyadmin sql dump
– version 3.3.9.2
– http://www.phpmyadmin.net
–
– 主机: localhost
– 生成日期: 2002 年 01 月 01 日 04:57
– 服务器版本: 5.5.9
– php 版本: 5.3.5
set sql_mode=”no_auto_value_on_zero”;
/*!40101 set @old_character_set_client=@@character_set_client */;
/*!40101 set @old_character_set_results=@@character_set_results */;
/*!40101 set @old_collation_connection=@@collation_connection */;
/*!40101 set names utf8 */;
–
– 数据库: `test`
–
– ——————————————————–
–
– 表的结构 `user`
–
create table if not exists `user` (
`id` int(10) unsigned not null auto_increment,
`user` varchar(6) not null,
`pwd` varchar(30) not null,
primary key (`id`)
) engine=innodb default charset=utf8 auto_increment=19 ;
–
– 转存表中的数据 `user`
–
insert into `user` (`id`, `user`, `pwd`) values
(11, ‘测试2′, ‘测试2′),
(12, ‘测试1′, ‘测试1′),
(13, ‘测试3′, ‘测试3′),
(15, ‘测试4′, ‘测试4′),
(16, ‘测试5′, ‘测试5′),
(17, ’222′, ’111′),
(18, ’222a’, ’111a’);
——————————————————–
下载本程序示例包: http://www.phptogether.com/download/procedure.rar
ok,一个简单的存储过程实现的分页就到此结束了,如果有什么疑问或者更好的实现方式可以联系站长哦!o(∩_∩)o ~~