尝试使用mssql和amp;做一些pageintaion PHP,但我似乎无法让它工作......我没有错误,所以我不能真正找出我做错了什么,我错过了什么明显的?
<?php
error_reporting(E_ALL); ini_set('display_errors', 1);
$dbhost = 'localhost';
$dbuser = '*****';
$dbpass = '******';
$db = 'blog';
$connectionInfo = array( "UID"=>$dbuser,
"PWD"=>$dbpass,
"Database"=>$db, "CharacterSet" => "UTF-8");
$connect_db = sqlsrv_connect ( $dbhost, $connectionInfo ) or die(sqlsrv_errors());
if ((!isset($_GET['pagenum'])) || (!is_numeric($_GET['pagenum'])) || ($_GET['pagenum'] < 1)) { $pagenum = 1; }
else { $pagenum = $_GET['pagenum']; }
$result = sqlsrv_query ($connect_db,"SELECT blogID FROM blog_posts") or die(sqlsrv_errors());
$rows = sqlsrv_num_rows($result);
$page_rows = 2;
$last = ceil($rows/$page_rows);
if (($pagenum > $last) && ($last > 0)) { $pagenum = $last; }
$max = ($pagenum - 1) * $page_rows;
$result2 = sqlsrv_query(($connect_db,"SELECT TOP $page_rows FROM blog_posts WHERE blogID NOT IN (SELECT TOP $max blogID FROM blog_posts ORDER BY blogID ASC) ORDER BY blogID ASC") or die(sqlsrv_errors());
while($info = sqlsrv_fetch_array( $result2, SQLSRV_FETCH_BOTH ))
{
print $info['blogID'];
echo "<br>";
}
echo "<p>";
echo " --Page $pagenum of $last-- <p>";
if ($pagenum == 1) { }
else
{
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=1'> <<-First</a> ";
echo " ";
$previous = $pagenum-1;
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$previous'> <-Previous</a> ";
}
echo " ---- ";
if ($pagenum == $last)
{
}
else {
$next = $pagenum+1;
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$next'>Next -></a> ";
echo " ";
echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$last'>Last ->></a> ";
}
?>
blogID是db
中每个帖子的唯一ID答案 0 :(得分:1)
非技术性答案(例如,不为您编写所有代码)
您目前获得的代码为$max = (page number-1) * length of page
-if page = 1,然后max = 0,因此第1页没有数据
- 对于第2页,你有1页长度的东西
- 对于第3页,你有2页长度的东西
很明显 - 这不是你的意思。你打算做的是选择从上一页末尾到当前页面末尾的行数。 MSSQL不太擅长这个首先
你需要一个最小值和最大值。从
显示 $min = (page number -1 * pagelength)+1
(例如,在一页末尾和下一页的开头不是相同的记录)
$max = page number * pagelength
如果页面长度为5,则页面视图可能是最小记录21,最多25
然后你就可以使用SQL了
SELECT *
FROM ( <your query here>
) AS RowConstrainedResult
WHERE RowNum >= $min
AND RowNum < $max
ORDER BY RowNum
你当前的select语句只会获得一个博客ID - 所以它会成为一个相当无聊的页面,但是......这就是你的电话 - 但希望你能得到这个想法。
你还需要知道记录的数量,因为你需要决定是否还有更多的页面。