mysql内置函数mysql_data_seek可以将指针移到指定的记录位置,PDO有没有提供类似功能的函数呢,因为我想用这个做分页程序,我查了一下PDO中有个FETCH_ORI_ABS的函数,好像说它也能移动指针,但我不知道具体怎样用哦。
回复讨论(解决方案)
http://www.sitepoint.com/forums/showthread.php?709890-Equivalent-of-mysqli_data_seek-in-PDO
郁闷,这篇帖子说这是不可能的。
难道我下面的分页程序就真的没法实现了
/*连接数据库*/
$dsn="mysql:host=localhost;dbname=guestbook";
$db=new PDO($dsn,'root','111'); //连接数据库
$db->query('set names gb2312'); //设置字符集
if(isset($_GET['page']) && (int)$_GET['page']>0) //获取页码
$Page=$_GET['page'];
else
$Page=1;
//设置每页显示记录数
$PageSize=4;
$keyword=trim($_GET['keyword']);
if ($keyword <> "")
{
$sql="select * from lyb where title like '%?%'";
$result=$db_prepare($sql); //创建结果集
$result->bindParam(1,$keyword);
}
else $result=$db->prepare("select * from lyb",array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$result->execute();
$RecordCount=$result->rowCount();
$PageCount =ceil($RecordCount/$PageSize);
?>
标题 | コンテンツ | 作成者 |
メール | 来 |
$Pos=($Page-1)*$PageSize;
for($i=0;$i<$PageSize;$i++){
$row=$result->fetch(PDO::FETCH_ASSOC,PDO::FETCH_ORI_ABS,$Pos);
if($row){
?>
= $row['title'];?> | = $row['content'];?> |
= $row['author'];?> | = $row['email'];?> |
= $row['ip'];?> |
}
$Pos++;
} ?>
テーブル>
// 显示分页链接
if($Page== 1)
echo "第一页 ";
else echo " 第一页 ";
if($Page==1) // 设置“上一页”链接
echo " 上一页 ";
else echo " 上一页";
for($i=1;$i if ($i==$Page) echo "$i ";
else echo " $i ";}
if($Page== $PageCount) // 设置“下一页”链接
echo 「下一页 」;
else echo " 下一页";
if($Page == $PageCount) //设置“最終一页”链接
echo " 末页 ";
else echo " 末页";
echo "   共".$RecordCount。 "条记录 "; //共用量条记录
echo " $Page/$PageCount 页"; //現在の位置
?>
サポートされている LIMIT 子句のデータベース库、比例 mysql、sqlite 等の制限開始、長さ分页 サポートされていない LIMIT 子句のデータベース库、比例 mssql、oracle 等の組み合わせ可能 ROWNUM、RN 完了分页
据说高版本的 mysql もサポート ROWNUM、RN 了、那么分页代码就可简化许多了
就你的代网辞言
$result->execute();
$row=$result->fetch(PDO::FETCH_ASSOC,PDO::FETCH_ORI_ABS,$Pos); これはその中の 1 条を取得したものであり、現在は循環エリアで実行する必要があります
完全に可能
$rows = $result->fetchall(PDO::FETCH_ASSOC,PDO::FETCH_ORI_ABS,$Pos);
全部取出,并
$rows = array_chunk($rows, $PageSize);
按每页行数切割成数组 ,再
foreach($rows[$Page-1] as $row) {
//输出内容
}
問題は、この文がそれらの 1 つを取得できないが、常に最初の 1 つを取得することです。これは、PDO::FETCH_ORI_ABS,$Pos がまったく機能しないことを意味します。
$row=$result->fetch(PDO::FETCH_ASSOC,PDO::FETCH_ORI_ABS,$Pos);
ページングに limit 句を使用していることはわかっていますが、ページングには別の方法を使用したいと考えています。すべてのレコードを結果セットに読み取ってからページングするため、結果セットが小さい場合は高速になります。
$Pos は同じページ上で変更されません。
$row=$result->fetch(PDO::FETCH_ASSOC,PDO::FETCH_ORI_ABS,$Pos+$i);
同じページの $Pos は変更されていません。
$row=$result->fetch(PDO::FETCH_ASSOC,PDO::FETCH_ORI_ABS,$Pos+$i);
項目を出力した後、$Pos++ が表示されます。 $row=$result->fetch(PDO::FETCH_ASSOC,PDO::FETCH_ORI_ABS,$Pos); を
$row=$result->fetch(); に変更しました 結果はまったく同じです、FETCH_ORI_ABS、 $Pos はまったく効果がありません
PDO::FETCH_ORI_ABS、$Pos は条件付きで有効になります
$result->fetchall() の方が優れています
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31