mysql — разбиение на страницы PHP с MySQLi

Я создаю свою собственную CMS. У меня есть система администрирования, и я могу вставлять в нее сообщения в базе данных, показывая, что сообщения не являются проблемой, но я понятия не имею, как выполнить нумерацию страниц.

И это мой запрос:

SELECT * FROM `posts` WHERE `status` != 'draft'

0

Решение

Создайте свой запрос, чтобы иметь 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 пункт, с точки зрения нумерации страниц (как вы можете получить дубликаты строк (на разных страницах))

Чтобы разбить на страницы с PHP

Что-то вроде этого должно быть достаточно

$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;";
}

Как предлагается в комментариях, хорошей практикой является использование подготовительных заявлений параметры привязки

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]