目錄
回复讨论(解决方案)
首頁 後端開發 php教程 php+mysql 分页问题

php+mysql 分页问题

Jun 23, 2016 pm 01:55 PM
php+mysql 分頁

求教:php+mysql分页 ,先贴代码,再描述问题
代码:

$page=isset($_GET['page'])?intval($_GET['page']):1;        //这句就是获取page=18中的page的值,假如不存在page,那么页数就是1。$searchinfo=isset($_GET['search'])?($_GET['search']):"-1"; $search=($searchinfo=='请输入关键字')?-1:$searchinfo;$num=1;                                      //每页显示3条数据/*首先咱们要获取数据库中到底有多少数据,才能判断具体要分多少页,具体的公式就是总数据库除以每页显示的条数,有余进一。也就是说10/3=3.3333=4 有余数就要进一。*/ if ($config[NEEDDB]) {  //if need db	$dbLink = DBPool::getLink($config[DBDRIVER]);	$daoImpl = DAOImpl::getImpl($dbLink, $config[TABLEPRE][BACKEND]);		$config[DBLINK] = $dbLink;	$config[DAOIMPL] = $daoImpl;}$adRs = $config[DAOIMPL]->adSearchCount($search);//$adList = rs2Array($adRs);$adList=mysql_fetch_array($adRs);mysql_free_result($adRs);//DBPool::closeLink($config[DBLINK]);if(count($adList)>0){$total=$adList[0]['cn']; //查询所有的数据}else{	$total=0;}$url='views/adSearchResult.php';//获取本页URL//页码计算$pagenum=ceil($total/$num);                                    //获得总页数,也是最后一页$page=min($pagenum,$page);//获得首页$prepg=$page-1;//上一页$nextpg=($page==$pagenum ? 0 : $page+1);//下一页$offset=($page-1)*$num;                                        //获取limit的第一个参数的值,假如第一页则为(1-1)*10=0,第二页为(2-1)*10=10。//开始分页导航条代码:$pagenav="显示第 <B>".($total?($offset+1):0)."</B>-<B>".min($offset+10,$total)."</B> 条记录,共 $total 条记录 ";//如果只有一页则跳出函数://if($pagenum<=1) return false;$pagenav.=" <a href=javascript:dopage('result','$url?page=1');>首页</a> ";if($prepg) $pagenav.=" <a href=javascript:dopage('result','$url?page=$prepg');>前页</a> "; else $pagenav.=" 前页 ";if($nextpg) $pagenav.=" <a href=javascript:dopage('result','$url?page=$nextpg');>后页</a> "; else $pagenav.=" 后页 ";$pagenav.=" <a href=javascript:dopage('result','$url?page=$pagenum');>尾页</a> ";$pagenav.="</select> 页,共 $pagenum 页";//假如传入的页数参数大于总页数,则显示错误信息If($page>$pagenum){       Echo "Error : Can Not Found The page ".$page;       Exit;}$adSearchRs = $config[DAOIMPL]->getADSearchInfo($search,$offset,$page);$adSearchList = rs2Array($adSearchRs);//mysql_free_result($adSearchRs);foreach ( $adSearchList as $it){//While($it=mysql_fetch_array($adSearchRs)){      Echo  '<div class="sylist1">       <input type="checkbox" class="check" name="checkbox" id="checkbox'.$it['id'].'" value="'.$it['id'].'"/>       </div>       <div class="sylist2">'.$it['title'].'</div>       <div class="sylist3">'.$it['subject'].'</div>       <div class="sylist4">'.$it['pic_url'].'</div>       <div class="sylist5">'.$it['advert_url'].'</div>       <div class="sylist6">'.$it['if_valid'].'</div>       </div>';}//显示数据echo $pagenav;//输出分页导航
登入後複製



问题描述:分页思路:先计算出查询条件的记录条数,然后根据页码和每页条数计算出分页数据(存在两次分页)。
第一次查询,是ok的,能够返回满足条件的数据条数,($adRs = $config[DAOIMPL]->adSearchCount($search););但是第二次查询执行后就报错了,报错信息是:
对应代码是While($it=mysql_fetch_array($adSearchRs)) 就是获取返回结果的时候。另外打印出的sql copy到数据库是有数据返回的


回复讨论(解决方案)

补充信息: 在代码中补充如图中代码后,返回的信息如下

那就是 $adSearchRs = $config[DAOIMPL]->getADSearchInfo($search,$offset,$page); 已经出错了!
你的 sql 指令是 call audioconver.p_advert_qry('-1',0,1) 吗?
正确吗?结果返回给谁了?

commands out sync: you can't run this command new
这是“命令不同步”的原因,如果遇到该错误,说明正在以错误顺序调用客户端函数

你执行的是 call 命令,没有 select
所以会产生两个结果集
第一个是 select 的结果集,由于没有 select 命令,所以是无效的不能 php 处理成资源
第二个才是 call 的结果集

虽然 mysql 提供了 C 函数 mysql_next_result 用于移动结果集
但 php 的 mysql 扩展并没有提供该函数,所以可认为php 的 mysql 不能很好的支持存储过程(因为 mysql4 并不支持存储过程)
mysqli 扩展提供了 mysqli_next_result 函数,所以如果使用了存储过程,最好是用 mysqli 驱动

附上解决该问题的 C 代码

 do    {         result=mysql_store_result(&conn);          mysql_free_result(result);    }while(!mysql_next_result(&conn)); // to solve the "2014:Commands out of sync; " problem    凡是在执行多查询时,每个查询后都需调用以上这段代码才行。
登入後複製
登入後複製

刚才说的不够准确,但意思是到了
应该是 mysql 扩展会自动选择非空结果集,但 mysql_free_result 函数只能清空第一个结果集。这样 call 的结果集得不到清空,所以出错了

commands out sync: you can't run this command new
这是“命令不同步”的原因,如果遇到该错误,说明正在以错误顺序调用客户端函数

你执行的是 call 命令,没有 select
所以会产生两个结果集
第一个是 select 的结果集,由于没有 select 命令,所以是无效的不能 php 处理成资源
第二个才是 call 的结果集

虽然 mysql 提供了 C 函数 mysql_next_result 用于移动结果集
但 php 的 mysql 扩展并没有提供该函数,所以可认为php 的 mysql 不能很好的支持存储过程(因为 mysql4 并不支持存储过程)
mysqli 扩展提供了 mysqli_next_result 函数,所以如果使用了存储过程,最好是用 mysqli 驱动

附上解决该问题的 C 代码

 do    {         result=mysql_store_result(&conn);          mysql_free_result(result);    }while(!mysql_next_result(&conn)); // to solve the "2014:Commands out of sync; " problem    凡是在执行多查询时,每个查询后都需调用以上这段代码才行。
登入後複製
登入後複製




网上也是这么说,但mysql 没有这个方法,应该是mysqli_store_result 吧

mysql_close() 一下就可以了

mysql_close() 一下就可以了


 在第一个查询后将数据?连接断掉?每次查询都创建一次连接?

对,在每次执行存储过程并读取数据之后
$adSearchRs = $config[DAOIMPL]->getADSearchInfo($search,$offset,$page);
$adSearchList = rs2Array($adSearchRs);
mysql_close();

所以你可能需要修改数据库类

不对,应该是
$adRs = $config[DAOIMPL]->adSearchCount($search);
//$adList = rs2Array($adRs);
$adList=mysql_fetch_array($adRs);
//mysql_free_result($adRs);
mysql_close();

不对,应该是
$adRs = $config[DAOIMPL]->adSearchCount($search);
//$adList = rs2Array($adRs);
$adList=mysql_fetch_array($adRs);
//mysql_free_result($adRs);
mysql_close();



关闭连接,重新连接数据?还是不能解决这个问题,最有没有办法就好将页面中两个存储过程中的一个改成sql,才间接解决这个问题。
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在CakePHP中建立自訂分頁? 如何在CakePHP中建立自訂分頁? Jun 04, 2023 am 08:32 AM

如何在CakePHP中建立自訂分頁?

PHP開發:如何實作表格資料排序與分頁功能 PHP開發:如何實作表格資料排序與分頁功能 Sep 20, 2023 am 11:28 AM

PHP開發:如何實作表格資料排序與分頁功能

如何使用 JavaScript 實作表格分頁功能? 如何使用 JavaScript 實作表格分頁功能? Oct 20, 2023 pm 06:19 PM

如何使用 JavaScript 實作表格分頁功能?

使用JavaScript實作表格資料的分頁顯示 使用JavaScript實作表格資料的分頁顯示 Jun 16, 2023 am 10:00 AM

使用JavaScript實作表格資料的分頁顯示

MyBatis分頁插件原理詳解 MyBatis分頁插件原理詳解 Feb 22, 2024 pm 03:42 PM

MyBatis分頁插件原理詳解

Vue組件實戰:分頁組件開發 Vue組件實戰:分頁組件開發 Nov 24, 2023 am 08:56 AM

Vue組件實戰:分頁組件開發

Vue技術開發中如何實現分頁功能 Vue技術開發中如何實現分頁功能 Oct 09, 2023 am 09:06 AM

Vue技術開發中如何實現分頁功能

VUE3開發入門教學:使用元件實作分頁 VUE3開發入門教學:使用元件實作分頁 Jun 16, 2023 am 08:48 AM

VUE3開發入門教學:使用元件實作分頁

See all articles