What are some best practices for handling pagination in PHP to ensure efficient and accurate results?

When implementing pagination in PHP, it is important to handle the logic efficiently to ensure accurate results and optimal performance. One best practice is to calculate the total number of pages based on the total number of items and items per page. Additionally, use prepared statements to prevent SQL injection attacks and sanitize user input to avoid potential security vulnerabilities.

// Calculate total number of pages
$totalItems = 1000; // total number of items
$itemsPerPage = 10; // items per page
$totalPages = ceil($totalItems / $itemsPerPage);

// Sanitize user input for page number
$page = isset($_GET['page']) ? filter_var($_GET['page'], FILTER_SANITIZE_NUMBER_INT) : 1;

// Validate page number to prevent out-of-range values
if($page < 1){
    $page = 1;
} elseif($page > $totalPages){
    $page = $totalPages;
}

// Calculate offset for SQL query
$offset = ($page - 1) * $itemsPerPage;

// Use prepared statements for SQL query to prevent SQL injection
$stmt = $pdo->prepare("SELECT * FROM items LIMIT :offset, :itemsPerPage");
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->bindParam(':itemsPerPage', $itemsPerPage, PDO::PARAM_INT);
$stmt->execute();

// Fetch and display results
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($results as $result){
    // Display item data
}