လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> လုံခြုံစိတ်ချရသော Connect () ဒေတာဘေ့စ် connection class ကို oncapsult လုပ်နည်း

လုံခြုံစိတ်ချရသော Connect () ဒေတာဘေ့စ် connection class ကို oncapsult လုပ်နည်း

M66 2025-05-24

PHP Development တွင် Database connection သည်အခြေခံနှင့်အရေးပါသော link တစ်ခုဖြစ်သည်။ ထိရောက်သောနှင့်လုံခြုံသောဒေတာဘေ့စ်ဆက်သွယ်မှု connection အတန်းအစားသည်ဖွံ့ဖြိုးရေးလုပ်ငန်းစဉ်ကိုရိုးရှင်းရုံသာမက SQL Inject ကဲ့သို့သောလုံခြုံရေးဆိုင်ရာအန္တရာယ်များကိုထိရောက်စွာတားဆီးနိုင်သည်။ ဤဆောင်းပါးသည်လုံခြုံစိတ်ချရသော connect () function ကို adapsulate လုပ်ပြီး SQL injection ကိုကာကွယ်ပေးသောဒေတာဘေ့စ် connection metod ကိုအကောင်အထည်ဖော်ရန်မိတ်ဆက်ပေးလိမ့်မည်။


1 ။ ဒေတာဘေ့စ် connection အတန်းများကို encapsult ရန်လိုအပ်သည်

ဒေတာဘေ့စ်နှင့်ချိတ်ဆက်ရန်ဇာတိ mysqli_connect () သို့မဟုတ် PDO ကို တိုက်ရိုက်အသုံးပြုရန်အဆင်ပြေသော်လည်း၎င်းကို encapsulation များမပါရှိပါက၎င်းကိုဆက်လက်ထိန်းသိမ်းရန်နှင့်ခက်ခဲသောကုဒ်သည်လွယ်ကူပြီးထိန်းသိမ်းရန်ခက်ခဲသည်။ အရာဝတ်ထုကို ဦး စားပေးသော encapsulation တဆင့်, ၎င်းကိုအကောင်အထည်ဖော်နိုင်သည်။

  • ဒေတာဘေ့စ် connection configuration ကို၏စည်းလုံးစီမံခန့်ခွဲမှုစီမံခန့်ခွဲမှု

  • ကုဒ်ပြန်လည်သုံးသပ်ခြင်းတိုးတက်အောင်

  • ဗဟိုမှခြွင်းချက်နှင့်အမှားများကိုကိုင်တွယ်

  • Preprocessing ထုတ်ပြန်ချက်များနှင့်အတူ SQL injection ကိုတားဆီး

2 ။ connection method ကိုအဖြစ် pdo ကို select လုပ်ပါ

အကြောင်းပြချက်များအတွက် PHP တွင်ဒေတာဘေ့စ် connection interface ကိုအသုံးပြုရန် PDO (PHP Data ords) ကိုအသုံးပြုရန်အကြံပြုသည်။

  • ဒေတာဘေ့စ်မျိုးစုံကိုထောက်ပံ့ခြင်းနှင့်မြင့်မားသော code ကိုသယ်ဆောင်နိုင်ပါသည်

  • SQL Injection ကိုကာကွယ်ရန်အတွက် built-in preprocessing ထုတ်ပြန်ချက်များ

  • ပြီးပြည့်စုံသောခြွင်းချက်ကိုင်တွယ် MANDING ယန္တရား

3 ။ နမူနာကုဒ်: လုံခြုံပြီးထိရောက်သောဆက်သွယ်ရေး () အတန်းအစား

 <?php

class Database {
    private $host = 'localhost';
    private $dbname = 'testdb';
    private $username = 'root';
    private $password = 'password';
    private $pdo;
    private $error;

    // လမ်းဆောက်လုပ်ရေး,ဆက်သွယ်မှုကိုစတင်ပါ
    public function __construct() {
        $dsn = "mysql:host={$this->host};dbname={$this->dbname};charset=utf8mb4";
        $options = [
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION, // ခြွင်းချက်ပစ်
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,       // ပုံမှန် Associative Array
            PDO::ATTR_EMULATE_PREPARES   => false,                  // simulation preprocessing disable,Preprocessing ကိုသုံးခြင်း
        ];

        try {
            $this->pdo = new PDO($dsn, $this->username, $this->password, $options);
        } catch (PDOException $e) {
            $this->error = $e->getMessage();
            // မှတ်တမ်းတင်ပါသို့မဟုတ် process အမှားများ
            die("ဒေတာဘေ့စဆက်သွယ်မှုမအောင်မြင်ပါ: " . $this->error);
        }
    }

    // စုံစမ်းမှု၏စည်းလုံးအရေးယူ(SELECT)
    public function query($sql, $params = []) {
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($params);
        return $stmt->fetchAll();
    }

    // ဖြည့်စွက်ခြင်း, ဖျက်ခြင်းနှင့်ပြုပြင်ခြင်း၏စည်းလုံးမှုအရေးယူ(INSERT/UPDATE/DELETE)
    public function execute($sql, $params = []) {
        $stmt = $this->pdo->prepare($sql);
        return $stmt->execute($params);
    }

    // နောက်ဆုံးထည့်သွင်းပါID
    public function lastInsertId() {
        return $this->pdo->lastInsertId();
    }
}

?>

IV ။ ဥပမာဥပမာကိုသုံးပါ

 <?php

$db = new Database();

// လုံခြုံရေးစုံစမ်းမှုဥပမာ:တားဆီး SQL သွင်းခြင်း
$userId = 123;
$result = $db->query("SELECT * FROM users WHERE id = :id", ['id' => $userId]);

// Safe Insert ဥပမာ
$name = 'Zhang San';
$email = 'zhangsan@m66.net';
$insertSql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$db->execute($insertSql, ['name' => $name, 'email' => $email]);

?>

5 ။ ဒီဒီဇိုင်းက SQL ဆေးထိုးခြင်းကိုအဘယ်ကြောင့်တားဆီးနိုင်သနည်း။

  • PDO POPO POSPOCENSING ထုတ်ပြန်ချက်များကိုအသုံးပြုခြင်းအားဖြင့် SQL ထုတ်ပြန်ချက်များကိုဒေတာများနှင့်ခွဲထားပြီးအသုံးပြုသူထည့်သွင်းမှုသည် SQL strings သို့တိုက်ရိုက်မတူပါ

  • Parameter သည် Database Driver ကိုအထူးဇာတ်ကောင်လွတ်မြောက်မှုကိုအလိုအလျောက်ကိုင်တွယ်ရန်ခွင့်ပြုသည်

  • preprocessing နှင့်အတူ Simulated preprocessing နှင့်လုံခြုံရေးကိုကာကွယ်ခြင်းနှင့်လုံခြုံရေးတိုးမြှင့်

6 ။ အကျဉ်းချုပ်

Database Connection အတန်းကို Connect () function ကိုချိတ်ဆက်ပြီး PDO ကိုအခြေခံသည့်ဆက်သွယ်မှုအဖြစ် pdo ကိုရွေးချယ်ပြီး POSPOCESS ကိုပေါင်းစပ်ခြင်းနှင့် PROTCEND ထုတ်ပြန်ချက်များကိုပေါင်းစပ်ခြင်းသည် PHP တွင် SQL Intointing ကိုကာကွယ်ရန်ထိရောက်သောနှင့်လုံခြုံသောဖြေရှင်းချက်တစ်ခုဖြစ်သည်။ ဤအတန်း၏ဒီဇိုင်းသည်ရိုးရှင်းလွယ်ကူပြီးအတိုင်းအတာအထိလွယ်ကူပြီးစီးပွားရေးလိုအပ်ချက်အများစုနှင့်တွေ့ဆုံရန်နှင့်ခေတ်သစ် PHP ဖွံ့ဖြိုးတိုးတက်မှုအတွက်အကြံပြုလေ့ရှိသည်။