Təhlükəsiz və Səmərəli PHP 8.2+ Verilənlər Bazasında Bağlantı

0 Replies 80 Views
·

Leave a rating: Təhlükəsiz və Səmərəli PHP 8.2+ Verilənlər Bazasında Bağlantı

You have already rated this thread. Re-rating it will remove your existing rating or review.

Rating:

Raters: Təhlükəsiz və Səmərəli PHP 8.2+ Verilənlər Bazasında Bağlantı

Participants
Thread Starter #0
Problem:
Veb tətbiqlərində verilənlər bazası ilə əlaqə qurmaq əsas funksionallıqlardan biridir. Lakin, köhnəlmiş üsullardan (məsələn, mysql_connect() kimi funksiyalar) istifadə etmək ciddi təhlükəsizlik boşluqlarına, xüsusilə də SQL Injection hücumlarına yol açır. Həmçinin, düzgün konfiqurasiya edilməmiş bağlantılar tətbiqin performansına mənfi təsir göstərə bilər. Müasir PHP versiyalarında (PHP 8.2+) verilənlər bazası bağlantısı üçün daha təhlükəsiz və səmərəli yanaşmalar mövcuddur.

Həll:
Verilənlər bazasına təhlükəsiz və səmərəli şəkildə bağlanmaq üçün PDO (PHP Data Objects) istifadə etmək ən yaxşı üsuldur. PDO, müxtəlif verilənlər bazalarına universal interfeys təmin edir və hazırlanmış sorğular (prepared statements) vasitəsilə SQL Injection-dan qorunmağa kömək edir. Aşağıda MySQL verilənlər bazasına PDO ilə bağlantı və məlumat seçimi üçün tam kod nümunəsi verilmişdir:

CODE
123456789101112131415161718192021222324252627282930313233343536373839404142
<?php
// Verilənlər bazası bağlantısı üçün parametrlər
$host = 'localhost';
$db   = 'sizin_verilenler_bazaniz'; // Verilənlər bazasının adı
$user = 'sizin_istifadeci_adiniz'; // Verilənlər bazası istifadəçi adı
$pass = 'sizin_sifreniz';           // Verilənlər bazası şifrəsi
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION, // Xətaları istisna kimi atmaq
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,     // Məlumatları assosiativ massiv kimi gətirmək
    PDO::ATTR_EMULATE_PREPARES   => false,                // Hazırlanmış sorğuların server tərəfində emalını təmin etmək (təhlükəsizlik üçün vacibdir)
];

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
    echo "[B]Verilənlər bazasına uğurlu bağlantı![/B]<br>";

    // Məlumat seçimi üçün nümunə (hazırlanmış sorğu ilə)
    $stmt = $pdo->prepare("SELECT id, ad, email FROM istifadeciler WHERE id = ?");
    $stmt->execute([1]); // ID-si 1 olan istifadəçini seç
    $user = $stmt->fetch();

    if ($user) {
        echo "[B]Seçilmiş istifadəçi:[/B]<br>";
        echo "[LIST]";
        echo "[*]ID: " . $user['id'];
        echo "[*]Ad: " . $user['ad'];
        echo "[*]Email: " . $user['email'];
        echo "[/LIST]";
    } else {
        echo "[I]ID-si 1 olan istifadəçi tapılmadı.[/I]<br>";
    }

} catch (\PDOException $e) {
    // Bağlantı xətası və ya sorğu xətası zamanı
    // İstehsal mühitində xəta mesajını birbaşa göstərmək əvəzinə, loqlaşdırmaq və istifadəçiyə ümumi bir xəta bildirişi vermək daha təhlükəsizdir.
    throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
?>


Qeyd: Bu kod nümunəsi PHP 8.2+ üçün nəzərdə tutulmuşdur və MySQL 8.0+ verilənlər bazası ilə uyğundur.

Məntiqi Əsaslandırma:
Bu üsulun üstünlükləri bunlardır:
  • Təhlükəsizlik: Prepared statements (hazırlanmış sorğular) SQL Injection hücumlarının qarşısını alır, çünki sorğu və məlumatlar ayrı-ayrılıqda göndərilir və emal olunur. PDO::ATTR_EMULATE_PREPARES => false parametrinə diqqət edin, bu, sorğuların server tərəfində emalını təmin edərək təhlükəsizliyi artırır.
  • Səmərəlilik: PDO, verilənlər bazası sürücülərini optimallaşdırır və müxtəlif verilənlər bazaları üçün eyni API-dən istifadə etməyə imkan verir. Bu, kodu daha təmiz və baxımlı edir.
  • Xəta İdarəetməsi: PDO::ERRMODE_EXCEPTION sayəsində verilənlər bazası ilə bağlı xətalar istisnalar (exceptions) şəklində atılır, bu da xətaların düzgün şəkildə tutulmasına və idarə olunmasına imkan verir. Bu, tətbiqin daha möhkəm olmasına kömək edir.
  • Müasirlik: Köhnəlmiş funksiyalardan fərqli olaraq, PDO PHP-nin hazırkı və gələcək versiyalarında dəstəklənən, standart və tövsiyə olunan bir yanaşmadır.
Bu yanaşma ilə veb tətbiqlərinizin verilənlər bazası ilə əlaqəsini həm təhlükəsiz, həm də səmərəli şəkildə qura bilərsiniz.

You must be logged in to reply.

0 quotes selected