分享微软sql& PHP

时间:2016-03-01 11:33:46

标签: php sql-server sqlsrv

尝试使用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

1 个答案:

答案 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 - 所以它会成为一个相当无聊的页面,但是......这就是你的电话 - 但希望你能得到这个想法。

你还需要知道记录的数量,因为你需要决定是否还有更多的页面。