2016-08-05 4 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

Используйте функцию abs для PHP, чтобы всегда быть уверенным, что ваше смещение является положительным числом.

$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

thats what mate, я получаю странные ошибки на веб-хостинге godaddy. –

Смежные вопросы