PHP Development တွင် Database connection သည်အခြေခံနှင့်အရေးပါသော link တစ်ခုဖြစ်သည်။ ထိရောက်သောနှင့်လုံခြုံသောဒေတာဘေ့စ်ဆက်သွယ်မှု connection အတန်းအစားသည်ဖွံ့ဖြိုးရေးလုပ်ငန်းစဉ်ကိုရိုးရှင်းရုံသာမက SQL Inject ကဲ့သို့သောလုံခြုံရေးဆိုင်ရာအန္တရာယ်များကိုထိရောက်စွာတားဆီးနိုင်သည်။ ဤဆောင်းပါးသည်လုံခြုံစိတ်ချရသော connect () function ကို adapsulate လုပ်ပြီး SQL injection ကိုကာကွယ်ပေးသောဒေတာဘေ့စ် connection metod ကိုအကောင်အထည်ဖော်ရန်မိတ်ဆက်ပေးလိမ့်မည်။
ဒေတာဘေ့စ်နှင့်ချိတ်ဆက်ရန်ဇာတိ mysqli_connect () သို့မဟုတ် PDO ကို တိုက်ရိုက်အသုံးပြုရန်အဆင်ပြေသော်လည်း၎င်းကို encapsulation များမပါရှိပါက၎င်းကိုဆက်လက်ထိန်းသိမ်းရန်နှင့်ခက်ခဲသောကုဒ်သည်လွယ်ကူပြီးထိန်းသိမ်းရန်ခက်ခဲသည်။ အရာဝတ်ထုကို ဦး စားပေးသော encapsulation တဆင့်, ၎င်းကိုအကောင်အထည်ဖော်နိုင်သည်။
ဒေတာဘေ့စ် connection configuration ကို၏စည်းလုံးစီမံခန့်ခွဲမှုစီမံခန့်ခွဲမှု
ကုဒ်ပြန်လည်သုံးသပ်ခြင်းတိုးတက်အောင်
ဗဟိုမှခြွင်းချက်နှင့်အမှားများကိုကိုင်တွယ်
Preprocessing ထုတ်ပြန်ချက်များနှင့်အတူ SQL injection ကိုတားဆီး
အကြောင်းပြချက်များအတွက် PHP တွင်ဒေတာဘေ့စ် connection interface ကိုအသုံးပြုရန် PDO (PHP Data ords) ကိုအသုံးပြုရန်အကြံပြုသည်။
ဒေတာဘေ့စ်မျိုးစုံကိုထောက်ပံ့ခြင်းနှင့်မြင့်မားသော code ကိုသယ်ဆောင်နိုင်ပါသည်
SQL Injection ကိုကာကွယ်ရန်အတွက် built-in preprocessing ထုတ်ပြန်ချက်များ
ပြီးပြည့်စုံသောခြွင်းချက်ကိုင်တွယ် MANDING ယန္တရား
<?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();
}
}
?>
<?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]);
?>
PDO POPO POSPOCENSING ထုတ်ပြန်ချက်များကိုအသုံးပြုခြင်းအားဖြင့် SQL ထုတ်ပြန်ချက်များကိုဒေတာများနှင့်ခွဲထားပြီးအသုံးပြုသူထည့်သွင်းမှုသည် SQL strings သို့တိုက်ရိုက်မတူပါ
Parameter သည် Database Driver ကိုအထူးဇာတ်ကောင်လွတ်မြောက်မှုကိုအလိုအလျောက်ကိုင်တွယ်ရန်ခွင့်ပြုသည်
preprocessing နှင့်အတူ Simulated preprocessing နှင့်လုံခြုံရေးကိုကာကွယ်ခြင်းနှင့်လုံခြုံရေးတိုးမြှင့်
Database Connection အတန်းကို Connect () function ကိုချိတ်ဆက်ပြီး PDO ကိုအခြေခံသည့်ဆက်သွယ်မှုအဖြစ် pdo ကိုရွေးချယ်ပြီး POSPOCESS ကိုပေါင်းစပ်ခြင်းနှင့် PROTCEND ထုတ်ပြန်ချက်များကိုပေါင်းစပ်ခြင်းသည် PHP တွင် SQL Intointing ကိုကာကွယ်ရန်ထိရောက်သောနှင့်လုံခြုံသောဖြေရှင်းချက်တစ်ခုဖြစ်သည်။ ဤအတန်း၏ဒီဇိုင်းသည်ရိုးရှင်းလွယ်ကူပြီးအတိုင်းအတာအထိလွယ်ကူပြီးစီးပွားရေးလိုအပ်ချက်အများစုနှင့်တွေ့ဆုံရန်နှင့်ခေတ်သစ် PHP ဖွံ့ဖြိုးတိုးတက်မှုအတွက်အကြံပြုလေ့ရှိသည်။