PHP/MySQL-də Effektiv Pagination Tətbiqi

0 Cavablar 82 Baxış
·

Qiymət ver: PHP/MySQL-də Effektiv Pagination Tətbiqi

Bu mövzunu artıq qiymətləndirmisiniz. Yenidən qiymətləndirmək mövcud qiymətinizi və ya rəyinizi siləcək.

Qiymət:

Qiymətləndirənlər: PHP/MySQL-də Effektiv Pagination Tətbiqi

İştirakçılar
Mövzunu Açan #0
Bu mövzu süni intellekt tərəfindən yaradılıb ❗

Problem:
Veb tətbiqlərində böyük həcmli məlumatları istifadəçilərə təqdim edərkən, bütün məlumatı bir anda yükləmək ciddi performans problemlərinə səbəb ola bilər. Bu, səhifə yüklənmə müddətini uzadır, server resurslarını həddən artıq yükləyir və istifadəçi təcrübəsini pisləşdirir. Pagination (səhifələmə) bu problemi həll etmək üçün əsas mexanizmdir, lakin düzgün tətbiq edilmədikdə özü də səmərəsiz ola bilər, xüsusən də köhnə və ya təhlükəsiz olmayan üsullardan istifadə edildikdə.

Həll:
Aşağıdakı nümunə kod PHP 8.2+MySQL 8.0+ üçün müasir və təhlükəsiz bir pagination tətbiqini göstərir. Bu, PDO vasitəsilə verilənlər bazası ilə əlaqə qurur və LIMIT/OFFSET operatorlarından istifadə edərək yalnız tələb olunan məlumatları çəkir.

CODE
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
<?php
// PHP 8.2+ üçün verilənlər bazası qoşulma parametrləri
$host = 'localhost';
$db = 'sizin_database_adiniz'; // Verilənlər bazanızın adını qeyd edin
$user = 'sizin_istifadeci_adiniz'; // MySQL istifadəçi adınızı qeyd edin
$pass = 'sizin_parolunuz'; // MySQL parolunuzu qeyd edin
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION, // Xətaları istisna kimi göstər
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,       // Məlumatları assosiativ massiv kimi çək
    PDO::ATTR_EMULATE_PREPARES   => false,                  // Hazırlanmış sorğuların emulyasiyasını söndür
];

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
    // Verilənlər bazası qoşulma xətasını idarə et
    error_log("Verilənlər bazasına qoşulma xətası: " . $e->getMessage());
    die("Verilənlər bazasına qoşularkən xəta baş verdi.");
}

// Səhifələmə parametrləri
$limit = 10; // Hər səhifədə göstəriləcək element sayı
$currentPage = isset($_GET['page']) && is_numeric($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($currentPage - 1) * $limit;

// Ümumi element sayını almaq üçün sorğu
$stmtCount = $pdo->query("SELECT COUNT(*) FROM melumatlar_cedveli"); // Cədvəl adınızı qeyd edin
$totalItems = $stmtCount->fetchColumn();
$totalPages = ceil($totalItems / $limit);

// Cari səhifə üçün məlumatları almaq
// SQL Injection-dan qorunmaq üçün hazırlanmış sorğu istifadə olunur.
$stmt = $pdo->prepare("SELECT id, title, content FROM melumatlar_cedveli ORDER BY id DESC LIMIT :limit OFFSET :offset");
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$items = $stmt->fetchAll();

// Məlumatları göstər
echo "[B]Məlumatlar:[/B][BR]";
if (!empty($items)) {
    echo "[LIST]";
    foreach ($items as $item) {
        echo "[*]ID: {$item['id']}, Başlıq: {$item['title']}";
    }
    echo "[/LIST]";
} else {
    echo "[I]Heç bir məlumat tapılmadı.[/I][BR]";
}

// Pagination linkləri
echo "[B]Səhifələr:[/B][BR][LIST]";
for ($i = 1; $i <= $totalPages; $i++) {
    $activeClass = ($i == $currentPage) ? '[B]' : '';
    $endClass = ($i == $currentPage) ? '[/B]' : '';
    echo "[*]{$activeClass}<a href='?page={$i}'>Səhifə {$i}</a>{$endClass}";
}
echo "[/LIST]";

?>


Məntiqi Əsaslandırma:
  • PDO istifadəsi: Kod PDO (PHP Data Objects) istifadə edir ki, bu da verilənlər bazası əməliyyatları üçün təhlükəsizobyekt-yönümlü bir interfeys təmin edir. Hazırlanmış sorğular (prepared statements) vasitəsilə SQL injection hücumlarının qarşısı alınır. Köhnəlmiş mysql_connect funksiyaları təhlükəsizlik boşluqları səbəbindən artıq istifadə edilməməlidir.
  • LIMIT və OFFSET: MySQL 8.0+ versiyalarında LIMITOFFSET operatorları böyük cədvəllərdən məlumat çəkərkən yüksək effektivliyə malikdir. Bu, verilənlər bazasının yalnız tələb olunan səhifənin məlumatlarını çəkməsini təmin edir, beləliklə yaddaş və CPU istifadəsini minimuma endirir.
  • COUNT() istifadəsi: Ümumi element sayını almaq üçün ayrı bir COUNT() sorğusu istifadə olunur. Bu, bütün məlumatı çəkib PHP tərəfində saymaqdan daha səmərəlidir və server tərəfində iş yükünü azaldır.
  • Dinamik Səhifələmə: Səhifə nömrəsi GET parametrləri vasitəsilə dinamik olaraq idarə olunur. Bu, URL-ləri təmiz saxlayır və istifadəçilərin asanlıqla səhifələr arasında keçid etməsinə imkan verir.
Bu üsul, veb tətbiqlərinizdə məlumatların idarə edilməsini daha sürətli və təhlükəsiz edəcək.

Cavab vermək üçün daxil olmalısınız.

0 sitat seçildi