Php 如果数据库中没有记录,则分页错误

Php 如果数据库中没有记录,则分页错误,php,mysql,pdo,Php,Mysql,Pdo,所以如果我的偏移量是0,我会得到一个负的结果,比如 var_dump($offset); var_dump($per_page); var_dump($uid); float(-10) int(10) int(4) 我的代码是 $query = "SELECT COUNT(*) FROM applied WHERE memberID = :memberID"; $stmt = $db->prepare($query); $stmt->bindP

所以如果我的偏移量是0,我会得到一个负的结果,比如

var_dump($offset);
var_dump($per_page);
var_dump($uid);

float(-10) 
int(10) 
int(4)
我的代码是

$query = "SELECT COUNT(*) FROM applied WHERE memberID = :memberID";
        $stmt = $db->prepare($query);
        $stmt->bindParam(':memberID', $uid, PDO::PARAM_INT);
        $stmt->execute();
        $total = $stmt->fetchColumn();    

$pages = ceil($total / $per_page);

$page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
'options' => array(
'default'   => 1,
'min_range' => 1,
),
)));

$offset = ($page - 1)  * $per_page; 

$query = "SELECT * FROM applied WHERE memberID = :memberID ORDER BY id DESC LIMIT :per_page OFFSET :offset";

         $stmt = $db->prepare($query);
         $stmt->bindParam(':per_page', $per_page, PDO::PARAM_INT);
         $stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
         $stmt->bindParam(':memberID', $uid, PDO::PARAM_INT);
         $stmt->execute();

$result = $stmt->fetchAll();
这是一个解决方案吗

$offset = ($page - 1)  * $per_page; 
if($offset < 0){
$offset = 10;
}
$offset=($page-1)*$每页;
如果($offset<0){
$offset=10;
}
或者这里有人可以告诉我一个更好的方法来处理这个问题


感谢您的帮助

使用PHP的abs函数始终确保您的偏移量为正数

$offset = abs(($page - 1)  * $per_page);
将代码修改为:

$query = "SELECT COUNT(*) FROM applied WHERE memberID = :memberID";
        $stmt = $db->prepare($query);
        $stmt->bindParam(':memberID', $uid, PDO::PARAM_INT);
        $stmt->execute();
        $total = $stmt->fetchColumn();    

$pages = ceil($total / $per_page);

$page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
'options' => array(
'default'   => 1,
'min_range' => 1,
),
)));

$offset = ($page - 1)  * $per_page; 

$query = "SELECT * FROM applied WHERE memberID = :memberID ORDER BY id DESC LIMIT :per_page".($offset>0?" OFFSET :offset":"");

$stmt = $db->prepare($query);
$stmt->bindParam(':per_page', $per_page, PDO::PARAM_INT);
if ($offset > 0) {
    $stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
}
$stmt->bindParam(':memberID', $uid, PDO::PARAM_INT);
$stmt->execute();

$result = $stmt->fetchAll();

这难道不意味着即使
$page=0
,你也会得到第二页吗?根据作者的说法,这个值是-10而不是零,因此应该可以纠正他所遇到的问题。如果
$page=0
,那么
($page-1)*$per_page=-10
,这就是问题的根源。您的解决方案将使其成为abs($page-1)*$per_page=10,这将使结果偏移10,并有效地获得第二页结果,而事实上第一页结果已被请求。让我们等待原始海报的响应。我的解决方案是基于他的问题,当他希望偏移值为10时,偏移值为-10。伙计们,我只想对我的代码进行适当的修复,如果你们有更好的解决方案,可以真正帮助我,我只是不想在将来得到任何错误,这就是我想要的:)得到以下错误致命错误:未捕获的异常“PDOException”,消息为“SQLSTATE[HY093]:无效参数号”。这不应该发生。这就是为什么,伙计,我在godaddy web主机上遇到了奇怪的错误。我也很感谢你的帮助。这个愚蠢的问题,但这段代码意味着你的页面是基于0的,但你的假设是它们是基于1的。是哪一个?