Я создаю свою собственную CMS. У меня есть система администрирования, и я могу вставлять в нее сообщения в базе данных, показывая, что сообщения не являются проблемой, но я понятия не имею, как выполнить нумерацию страниц.
И это мой запрос:
SELECT * FROM `posts` WHERE `status` != 'draft'
Создайте свой запрос, чтобы иметь LIMIT
Конец SQL-результата;
SELECT * FROM posts WHERE status != 'draft' ORDER BY id ASC LIMIT <<offset>>, <<amount>>
Например;
SELECT * FROM posts WHERE status != 'draft' ORDER BY id ASC LIMIT 0, 10 #Fetch first 10
SELECT * FROM posts WHERE status != 'draft' ORDER BY id ASC LIMIT 10, 10 #Fetch next 10
Прочитайте LIMIT
Вам нужно будет ORDER BY
ваш первичный ключ, так как полагаться на порядок, который MySQL дает без ORDER BY
пункт, с точки зрения нумерации страниц (как вы можете получить дубликаты строк (на разных страницах))
Что-то вроде этого должно быть достаточно
$intTotalPerPage = 10;
$intPage = isset($_GET['page']) && ctype_digit($_GET['page']) ? (int) $_GET['page'] : 0;
$strSqlQuery = "SELECT * FROM posts WHERE status != ? ORDER BY `id` ASC LIMIT ?, ?";
$strStatus = 'draft';
$intStart = ($intPage * $intTotalPerPage);
$intLimit = $intTotalPerPage;
$objDbLink = mysqli_connect("...");
$objGetResults = mysqli_prepare($objDbLink, $strSqlQuery);
mysqli_stmt_bind_param($objGetResults, 'sii', $strStatus, $intStart, $intLimit);
//Execute query and fetch
//Display results
$objTotalRows = mysqli_query("SELECT COUNT(id) AS total FROM posts WHERE status != 'draft'");
$arrTotalRows = mysqli_fetch_assoc($objTotalRows);
$intTotalPages = ceil($arrTotalRows['total'] / $intTotalPerPage);
for ($i = 0; $i <= $intTotalPages; $i++) {
echo "<a href='?page=" . $i . "'>[" . $i . "]</a>&bsp;";
}
Как предлагается в комментариях, хорошей практикой является использование подготовительных заявлений параметры привязки
Других решений пока нет …