PHP တွင် MySQL ဒေတာဘေ့စ်နှင့်အပြန်အလှန်ဆက်သွယ်သည့်အခါ MySQLI extension မှပေးသော API ကိုအသုံးပြုလေ့ရှိသည်။ ဒေတာဘေ့စ်လုပ်ငန်းများ၏တည်ငြိမ်မှုနှင့်လုံခြုံမှုကိုသေချာစေရန်အထူးသဖြင့် SQL Injection တိုက်ခိုက်မှုများကိုရှောင်ရှားရန်အတွက်ကျွန်ုပ်တို့သည်ပြင်ဆင်ထားသောထုတ်ပြန်ချက်များနှင့်ခြွင်းချက်ကိုင်တွယ်သည့်ယန္တရားများကိုမှန်ကန်စွာအသုံးပြုရန်လိုအပ်သည်။
ဤဆောင်းပါးသည်ဒေတာဘေ့စ်စစ်ဆင်ရေးများ၏တည်ငြိမ်မှုနှင့်လုံခြုံမှုကိုသေချာစေရန် PHP တွင် PHP တွင် MySQLI :: stmt_init function ကိုမည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးလိမ့်မည်။ Code တွင် URL domain name ကိုမည်သို့ပြုပြင်ရမည်ကိုပြသပါမည်။
PHP တွင် MySQLI သည် ဒေတာဘေ့စ်မေးမြန်းချက်များကိုလုပ်ဆောင်ရန်နည်းလမ်းနှစ်မျိုးရှိသည်။ ကြိုတင်မဆိုထုတ်ပြန်ချက်များ၏အားသာချက်များမှာ -
SQL Injection ကိုတားဆီးပါ ။ Preprocessing statements သည် SQL ယုတ္တိဗေဒနှင့်အချက်အလက်များကိုသီးခြားစီဒေတာများကိုသီးခြားစီ SQL Query များသို့တိုက်ရိုက်မခွဲနိုင်အောင် SQL quertection ၏အန္တရာယ်ကိုရှောင်ရှားရန်။
စွမ်းဆောင်ရည်တိုးတက်စေရန်အတွက် - အလားတူမေးမြန်းချက်များကိုအကြိမ်ပေါင်းများစွာအကောင်အထည်ဖော်လျှင်ကြိုတင်ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များကိုတစ်ကြိမ်သာစုစည်းရန်လိုအပ်သည်။
MySQLI :: stmt_init သည် MySQLI အတန်းထဲတွင် mySQLI အတန်းရှိနည်းလမ်းတစ်ခုဖြစ်သည်။ ၎င်းသည် parameters တွေကိုကွပ်မျက်ခြင်း,
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
if ($mysqli->connect_error) {
die('ဆက်သွယ်မှုမအောင်မြင်ပါ: ' . $mysqli->connect_error);
}
$stmt = $mysqli->stmt_init(); // အသစ်တစ်ခုကိုကြိုတင်ကြေငြာချက်အသစ်ကိုအစပြုပါ
if (!$stmt) {
die('ပြင်ဆင်ထားကြေညာချက်ကိုစတင်ရန်မအောင်မြင်ပါ');
}
ဒေတာဘေ့စ်စစ်ဆင်ရေးများတွင်အမှားကိုင်တွယ်သည်အထူးအရေးကြီးသည်။ PHP သည် database အမှားအယွင်းများကြောင့်ပျက်ကျမှုအစီအစဉ်များကိုရှောင်ရှားရန်ခြွင်းချက်များကိုဖမ်းရန်ချွင်းချက်များကိုဖမ်း ရန်ကြိုးစားမှု ကြေငြာချက်တစ်ခုပေးသည်။
MySQLI မှခြွင်းချက်ကိုင်တွယ်ရန် MySQLI_REPORD_ERRORR သို့ MYSQLI ၏ အစီရင်ခံစာကို MYSQLI_REPORD သို့သတ်မှတ်ရန်လိုအပ်သည်။ ထို့နောက်ချွင်းချက်ကိုဖမ်းရန်နှင့်သင့်လျော်သောအပြောင်းအလဲနဲ့လုပ်ဆောင်ရန် Try-catch statement block ကိုသုံးပါ။
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
if ($mysqli->connect_error) {
die('ဆက်သွယ်မှုမအောင်မြင်ပါ: ' . $mysqli->connect_error);
}
// ခြွင်းချက်အစီရင်ခံစာကိုဖွင့်ပါ
$mysqli->report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT;
try {
$stmt = $mysqli->stmt_init();
if (!$stmt->prepare('SELECT * FROM users WHERE email = ?')) {
throw new Exception('ကြိုတင်ကြေငြာချက်ကြိုတင်ပြင်ဆင်မှုမအောင်မြင်ပါ');
}
// parameters တွေကိုချည်ထား
$email = 'user@example.com';
$stmt->bind_param('s', $email); // 's' string ကိုအမျိုးအစားကိုကိုယ်စားပြုတယ်
// တစ် ဦး စုံစမ်းမှု execute
$stmt->execute();
// ရလဒ်များကိုရယူပါ
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo $row['name'] . '<br>';
}
$stmt->close();
} catch (mysqli_sql_exception $e) {
echo 'ဒေတာဘေ့စ်စစ်ဆင်ရေးအမှား: ' . $e->getMessage();
} catch (Exception $e) {
echo 'အမည်မသိအမှား: ' . $e->getMessage();
} finally {
$mysqli->close();
}
အထက်ဖော်ပြပါကုဒ်များတွင် ဒေါ်လာ stmt-> ပြင်ဆင်ခြင်း () ကြေ ငြာ ချက်သည် SQL query ကို ပြင်ဆင်သည်။ ဤနည်းအားဖြင့် $ email တွင်အန္တရာယ်ရှိသော SQL Code တွင်ပါ 0 င်ပါကပင်တိုက်ရိုက်ကွပ်မျက်ခံရမည်မဟုတ်,
MySQLI_REPORE_ERRORE_ERROREROR ကို ဖွင့်ခြင်းအားဖြင့် MySQLI သည် အမှားကုဒ်ကိုပြန်ပို့မည့်အစားသို့မဟုတ်အမှားအယွင်းတစ်ခုသို့ပြန်ပို့မည့်အစားချွင်းချက်ချထားသည်။ ၎င်းသည်ကျွန်ုပ်တို့အားတိုက်ရိုက် crashing processing ကိုရှောင်ရှားရန် ကြိုးစားမှု ကြေငြာချက်မှတစ်ဆင့်ခြွင်းချက်ကိုဖမ်းယူရန်ခွင့်ပြုသည်။ ထို့အပြင်အဘယ်အရာဖြစ်ပျက်နေပါစေဒေတာဘေ့စ်ဆက်သွယ်မှုကိုစနစ်တကျပိတ်ထားရန်သေချာစေရန် နောက်ဆုံးတွင် နောက်ဆုံးကြေညာချက်လုပ်ကွက်များကိုအသုံးပြုပါ။
သင်၏ကုဒ်ထဲ၌ URLs များကိုအသုံးပြုပါက M66.net ဖြင့် Domain Name ကိုအစားထိုးရန်သေချာအောင်လုပ်ပါ။ ဥပမာအားဖြင့်: