2

私は単純なデータベースから選択して表示するアプリケーションを作成しており、それに合わせてページ付けを構築しています。

これが私のコードです:

<?php   
   $sqlcount = "SELECT * FROM user where user_id= ?";
   $qcount = $db->prepare($sqlcount);
   $qcount->execute(array($id));
   $qcount->setFetchMode(PDO::FETCH_BOTH);
   $total = $qcount->rowCount();

   // How many items to list per page
   $limit = 10;

   // How many pages will there be
   $pages = ceil($total / $limit);

   // What page are we currently on?
   $page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
                            'options' => array(
                                'default'   => 1,
                                'min_range' => 1,
                            ),
   )));

   // Calculate the offset for the query
   $offset = ($page - 1)  * $limit;

   // Some information to display to the user
   $start = $offset + 1;
   $end = min(($offset + $limit), $total);

   // The "back" link
   $prevlink = ($page > 1) ? '<a href="?page=1" title="First page">&laquo;</a> <a href="?page=' . ($page - 1) . '" title="Previous page">&lsaquo;</a>' : '<span class="disabled">&laquo;</span> <span class="disabled">&lsaquo;</span>';

   // The "forward" link
   $nextlink = ($page < $pages) ? '<a href="?page=' . ($page + 1) . '" title="Next page">&rsaquo;</a> <a href="?page=' . $pages . '" title="Last page">&raquo;</a>' : '<span class="disabled">&rsaquo;</span> <span class="disabled">&raquo;</span>';

   // Display the paging information
   echo '<div id="paging"><p>', $prevlink, ' Page ', $page, ' of ', $pages, ' pages, displaying ', $start, '-', $end, ' of ', $total, ' results ', $nextlink, ' </p></div>';

   $stmt = $db->prepare("SELECT * FROM recipes WHERE user_id = :userid ORDER BY name LIMIT :limit OFFSET :offset");
   $stmt->bindParam(':userid', $id, PDO:: PARAM_INT);
   $stmt->bindParam(':limit', $limit, PDO:: PARAM_INT);
   $stmt->bindParam(':offset', $offset, PDO:: PARAM_INT);
   $stmt->execute();
   $rowcount = $stmt->rowCount();

   echo "<ul id='container'>";
   if(empty($rowcount)){echo"No recipes";}
   while($row = $stmt->fetch()){
    $recipeid = $row['id'];
    $public = $row['public'];

    //here i left out some stuff unimportant to the problem
   }
?>

ページネーションを入れる前に、結果が表示されました。現在、エラー報告ではエラーはありませんが、「レシピなし」とが表示されます« ‹ Page 0 of 0 pages, displaying -9-0 of 0 results › »

4

1 に答える 1

2

関数を使用してクエリから返された行をカウントしようとしています。witchをrowCount()使用して、INSERT、UPDATE、DELETEクエリから影響を受けた行を返しています。カウントクエリを作成する必要があります。

代わりにこの例を試してください。

$sqlcount = "SELECT COUNT(*) FROM user where user_id= ?";
$qcount = $db->prepare($sqlcount);
$qcount->execute(array($id));
$total = $qcount->fetchColumn();
于 2013-01-20T03:02:33.170 に答える