လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> လုံခြုံစိတ်ချရသော Connect () function database connection class ကို oncapsult လုပ်နည်း။ SQL Injection PhP တွင်ထိရောက်သောဆက်သွယ်မှု () ဒေတာဘေ့စ် connection method ကိုမည်သို့အကောင်အထည်ဖော်ရမည်နည်း။

လုံခြုံစိတ်ချရသော Connect () function database connection class ကို oncapsult လုပ်နည်း။ SQL Injection PhP တွင်ထိရောက်သောဆက်သွယ်မှု () ဒေတာဘေ့စ် connection method ကိုမည်သို့အကောင်အထည်ဖော်ရမည်နည်း။

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 ဖွံ့ဖြိုးတိုးတက်မှုအတွက်အကြံပြုလေ့ရှိသည်။