2016-08-05 42 views
1

沒有記錄,所以如果我的偏移量是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; 
} 

或有人在這裏可以告訴我一個更好的方法來處理這個問題

感謝您的幫助

+0

而愚蠢的問題,但是這個代碼意味着你的網頁是基於0的,但你的假設是,他們是基於1。哪一個? – apokryfos

回答

1

使用PHP的abs函數總是確保您的偏移量是一個正數。

$offset = abs(($page - 1) * $per_page); 
+0

哇這是這麼簡單?非常感謝你的幫助 –

+0

即使'$ page = 0',這是否意味着你總是會得到第二頁? – apokryfos

+0

根據作者的價值是-10不是零,所以它應該糾正他有問題。 – Dave

0

修改代碼以:

$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(); 
+0

得到以下錯誤致命錯誤:未知的異常'PDOException'消息'SQLSTATE [HY093]:無效的參數號碼' –

+0

奇怪。這不應該發生。 – apokryfos

+0

多數民衆贊成什麼隊友,我越來越奇怪錯誤上godaddy虛擬主機 –