是否可以使用PHP PDO将Mysql查询结果分页为每页5 × 5的网格?


Is it possible to paginate Mysql query results in a 5 by 5 grid per page using PHP PDO?

我想查询url到图像的数据库,然后使用php显示它们。到目前为止,我还没能找到任何不使用javascript的例子(不想使用,因为它加载所有的图像在同一页面和javascript控制只是你所看到的)。

其他分页示例根本不允许像这样输出结果....

image1 image2 image3 image4 image5
image6 image7 image8 image9 image10
1 2 3 4 5 Next

…无需通过PHP取消分页,也无需硬编码分页。这没有多大意义,因为图像可能在任何给定的时间或多或少。

有人知道这是可能的吗?

例如…

在这个脚本中,循环只能控制每页显示的记录数量。我需要能够在输出指定数量的记录后打破td。

<?php
require_once'connect.php';
$query = $db->query("SELECT COUNT(id) FROM table");
$rows = $query->fetchColumn();
$items_per_page = 25;
$last_page = $rows/$items_per_page;
if(isset($_GET['p']) && ctype_digit($_GET['p']) && $_GET['p'] > 0) {
    $page = $_GET['p'];
}
else {
    $page = '1';
}
if($page > $last_page) {
    $page = $last_page;
}
$page_controls = '<p class="page_controls">';
$start = ($page -1) * $items_per_page;
if($items_per_page > $rows) {
    $page_controls .= '<span>1</span>';
}
else {
    if($page > 1) {
        $prev = $page - 1;
        $page_controls .= '<a href="?p='. $prev .'">Prev</a>';
        for($i = ($page - 3); $i < $page; $i++) {
            if($i > 0) {
                $page_controls .= '<a href="?p=' . $i .'">' . $i . '</a>';
            }
        }
    }
$page_controls .= '<span>'. $page .'</span>';
if($page < $last_page) {
    for($i = $page+1; $i <= $last_page; $i++) {
        $page_controls .= '<a href="?p=' . $i . '">' . $i . '</a>';
            if($i >= $page+3) {
                break;
            }
    }
    $next = $page + 1;
    $page_controls .= '<a href="?p=' . $next . '">Next</a>';
    }
}
$page_controls .= '</p>';
$query = $db->prepare("SELECT * FROM table limit ?, ?");
$query->bindParam(1, $start, PDO::PARAM_INT);
$query->bindParam(2, $items_per_page, PDO::PARAM_INT);
$query->execute();
echo '<table>';
$cols = 5;
foreach($query->fetchAll(PDO::FETCH_ASSOC) as $data) {

    echo '<tr>
    <td><a href="' . $data['url'] . '"><img src="' . $data['image_url'] . '"  width=200 height=100></a></td>
    </tr>';
}
echo '</table>';
echo $page_controls;
?>

有人早些时候发布了一个解决方案,但后来删除了它,所以我不能给予适当的信任。然而,这里有一个小的修改,完成我的问题…

echo '<table>';
$cols = 5;
foreach($query->fetchAll(PDO::FETCH_ASSOC) as $cnt => $data) {
    if ( $cnt % $cols == 0 ) {
        echo '<tr>';
    }
    echo '<td><a href="<' . $data['url'] . '"><img src="' . $data['image_url'] . '"></a></td>
    ';
    if (  $cnt % $cols == 5 ) {
        echo '</tr>';
    }    
    $cnt++;
}
echo '</table>';
总的来说,我同意用CSS来控制图像的布局是最好的。如果您喜欢这样,那么前面的代码是最好的。