0

データベースからすべてのレコードを返して、それに応じてページ番号を付けようとしています。

私は以下を持っています 私はチュートリアルからのみ一緒に議論することができました それは私のブラウザに何も出力していないようですので、私は私の構文に誤りを犯したと思いますか?

// No County Selected
        try
        {
        $per_page = '3';
        $res = $conn->prepare("SELECT * FROM directory WHERE user_active != ''");
        $rows = $res ->fetchAll();
        $total_records = count($rows);
        $pages = ceil($total_records / $per_page); 
        $page  = (isset ($_GET['page']))  ? (int) $_GET['page'] : 1 ;
        $start = ($page - 1) *  $per_page; 
        $query = $db->query("SELECT * FROM directory LIMIT $start , $per_page");
        while($row = $query->fetch(PDO::FETCH_ASSOC)){
        echo '<br>' . $row['id'];
        } ?>
        <br><br>
        <?php
        if ($pages >=  1 && $page <= $pages){
        //if ($page>1 && $page <= $pages){$previous=($page -1); echo '<a href="?page=' .$previous. '">Previous</a>';}
        for($x=1; $x<=$pages; $x++){ echo ($x == $page) ? ' <strong><a href="?page='.$x.'">'.$x.'</a></strong> ' : ' <a href="?page='.$x.'">'.$x.'</a> ';}
        //if ($page>1  && $page <= $pages){ $next=($page+1) ; echo '<a href="?page=' .$next. '">Next</a>';}
        }
4

1 に答える 1

0

You have a logical flaw in your queries. The condition mismatches between the query you use to obtain the total count:

SELECT * FROM directory WHERE user_active != ''

and the query you use to fetch the limited (paginated) rows:

SELECT * FROM directory LIMIT $start , $per_page

Both queries should share the same conditions. Additionally, the first query should only COUNT the rows, not return them all:

SELECT COUNT(1) FROM directory WHERE user_active != ''

You will then find the number of rows (count) in the first column of the first result-row.

于 2012-11-04T14:02:49.690 に答える