PDO怎樣將結果集指標移動到指定的記錄位置上啊

來源:互聯網
上載者:User
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){ ?> $Pos++; } ?>
標題 內容 作者 email 來自

if($Page== 1)
echo "第一頁 ";
else echo " 第一頁 ";
if($Page==1) // 設定“上一頁”連結
echo " 上一頁 ";
else echo " 上一頁 ";
for($i=1;$i<= $PageCount;$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 起始,長度 分頁
對於不支援 LIMIT 子句的資料庫,比如 mssql、oracle 等可結合 ROWNUM、RN 完成分頁
據說高版本的 mysql 也支援 ROWNUM、RN 了,那麼分頁代碼就可簡化許多了

就你的代碼而言
$result->execute(); 是查詢所有合格記錄
$row=$result->fetch(PDO::FETCH_ASSOC,PDO::FETCH_ORI_ABS,$Pos); 是擷取其中一條,於是就要在迴圈裡執行
你完全可以
$rows = $result->fetchall(PDO::FETCH_ASSOC,PDO::FETCH_ORI_ABS,$Pos);
全部取出,並
$rows = array_chunk($rows, $PageSize);
按每頁行數切割成數組 ,再
foreach($rows[$Page-1] as $row) {
//輸出內容
}

問題是這句擷取不到其中一條,獲得的總是第一條,也就是說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() 比較好

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.