PHP တွင်ဒေတာဘေ့စ်လုပ်ငန်းများလုပ်ဆောင်သည့်အခါ MySQLI သည်အဓိကအားဖြင့် exaction oriented interfaces များကိုထောက်ပံ့ပေးသောအလွန်အသုံးများသော extension တစ်ခုဖြစ်သည်။ Database စစ်ဆင်ရေး၏တည်ငြိမ်မှုနှင့်ထိရောက်မှုကိုတိုးတက်စေရန် MySQLI :: stmt_init function ကို မည်သို့ပေါင်းစပ် ရမည် ကိုယနေ့ဆွေးနွေးပါမည် ။
MySQLI :: Stmtt_init သည် MySQLI အတန်းထဲတွင် preprocessing statement initial initial initial initial ပေးရန်အသုံးပြုသော MySQLI လူတန်းစားတွင်နည်းလမ်းဖြစ်သည်။ ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များသည် SQL injection တိုက်ခိုက်မှုများကိုတားဆီးရုံသာမကဒေတာဘေ့စ်မေးမြန်းချက်များ၏ကွပ်မျက်မှုစွမ်းဆောင်ရည်ကိုလည်းတိုးတက်စေသည်။ ဘာဖြစ်လို့လဲဆိုတော့စုံစမ်းစစ်ဆေးရေးဖော်ပြချက်များကိုအသုံးပြုသောအခါစုံစမ်းမှုကြေညာချက်ကိုတစ်ကြိမ်ခွဲခြမ်းစိတ်ဖြာခြင်းသည်တစ်ချိန်ကခွဲခြမ်းစိတ်ဖြာလိမ့်မည်။
ဒေတာဘေ့စ်တစ်ခုတွင်ငွေပေးငွေယူသည်အောင်မြင်မှုသို့မဟုတ်ကျရှုံးခြင်းကိုဖြစ်စေ database စစ်ဆင်ရေးများကိုရည်ညွှန်းသည်။ အရောင်းအသမတ်ခြင်းနှင့်ယုံကြည်စိတ်ချရသေချာ။ ငွေပေးငွေယူ၏အခြေခံစစ်ဆင်ရေးများတွင်:
စတင်ရန် : ငွေပေးငွေယူကိုစတင်ပါ။
ကျူးလွန် - ဒေတာဘေ့စ်မှပြုပြင်မွမ်းမံခြင်းများကိုအကျိုးအမြတ်ပြောင်းလဲရန်ငွေပေးချေမှုကိုကျူးလွန်ရန်။
Rollback : Rollback အရောင်းအ 0 ယ်များနှင့်ငွေပေးငွေယူ၌စစ်ဆင်ရေးအားလုံးကိုပယ်ဖျက်။
သင်ဒေတာဘေ့စ်လုပ်ငန်းမျိုးစုံလုပ်ဆောင်နေသည့်အခါဤလုပ်ငန်းများအောင်မြင်ရန်သို့မဟုတ်ကျရှုံးခြင်းကိုသေချာစေရန်သင်လိုအပ်နိုင်သည်။ ၎င်းကိုအောင်မြင်ရန်သင်ငွေပေးငွေယူထိန်းချုပ်မှုကိုသုံးနိုင်သည်။
MySQLI :: STMT_INIT ကို အသုံးပြု. ငွေပေးချေမှုထိန်းချုပ်မှုနှင့်ပေါင်းစပ်ခြင်းဖြင့်ဒေတာဘေ့စ်လည်ပတ်မှုမျိုးစုံတည်ငြိမ်မှုကိုသေချာစေနိုင်သည်။ လုပ်ဆောင်မှုတစ်ခုအနေဖြင့်လုပ်ဆောင်မှုတစ်ခုပျက်ပြားသွားပါကဒေတာဘေ့စ်၏ရှေ့နောက်ညီညွတ်မှုကိုသေချာစေရန်ကွပ်မျက်ခံရသောစစ်ဆင်ရေးများကိုပြန်လည်ရုပ်သိမ်းရန်ငွေပေးချေမှုကိုပြန်ဖွင့်နိုင်သည်။
MySQLI :: stmt_init ပေါင်းစပ်ထားသော PHP Code Negion ဥပမာတစ်ခုမှာငွေပေးချေမှုထိန်းချုပ်မှုဖြင့်ပေါင်းစပ်ထားသည်။
<?php
// ဒေတာဘေ့စ် connection တစ်ခုဖန်တီးပါ
$mysqli = new mysqli("localhost", "username", "password", "database_name");
// ဆက်သွယ်မှုအောင်မြင်မှုရှိမရှိစစ်ဆေးပါ
if ($mysqli->connect_error) {
die("ဆက်သွယ်မှုမအောင်မြင်ပါ: " . $mysqli->connect_error);
}
// ငွေပေးငွေယူတစ်ခုစတင်ပါ
$mysqli->begin_transaction();
try {
// Preprocessing ထုတ်ပြန်ချက်များကိုအစပြု
$stmt = $mysqli->stmt_init();
// ပထမ ဦး ဆုံးသွင်းစစ်ဆင်ရေး
if ($stmt->prepare("INSERT INTO users (username, email) VALUES (?, ?)")) {
$username = 'user1';
$email = 'user1@m66.net';
$stmt->bind_param("ss", $username, $email);
$stmt->execute();
} else {
throw new Exception("ကြေညာချက်ကိုပြင်ဆင်ရန်ပျက်ကွက်");
}
// ဒုတိယထည့်သွင်းစစ်ဆင်ရေး
if ($stmt->prepare("INSERT INTO orders (user_id, product) VALUES (?, ?)")) {
$user_id = 1; // အသုံးပြုသူယူဆIDအတွက်1
$product = 'Product A';
$stmt->bind_param("is", $user_id, $product);
$stmt->execute();
} else {
throw new Exception("ကြေညာချက်ကိုပြင်ဆင်ရန်ပျက်ကွက်");
}
// တင်သွင်းမှုတင်သွင်း
$mysqli->commit();
echo "ငွေပေးငွေယူအောင်မြင်စွာတင်သွင်းခဲ့သည်!";
} catch (Exception $e) {
// အမှားတစ်ခုဖြစ်ပေါ်သည့်အခါငွေပေးငွေယူကိုပြန်လှိမ့်ပါ
$mysqli->rollback();
echo "ငွေပေးငွေယူ Loverback: " . $e->getMessage();
}
// ဆက်သွယ်မှုကိုပိတ်ပါ
$mysqli->close();
?>
ဒေတာဘေ့စ် connection တစ်ခုတည်ဆောက်ပါ။ MySQL ဒေတာဘေ့စ်နှင့်ချိတ်ဆက်ရန် MySQLI () function အသစ်ကို သုံးပါ။ ဆက်သွယ်မှုမအောင်မြင်ပါကပရိုဂရမ်သည်အမှားအယွင်းတစ်ခုဖြစ်ပြီးကွပ်မျက်ခြင်းကိုရပ်တန့်စေသည်။
ငွေပေးငွေယူကိုစတင်ပါ - ငွေပေးငွေယူတစ်ခုစတင်ရန် $ MySQLI-> Integransaction () ကို သုံးပါ။ ငွေပေးငွေယူပြီးနောက် Database operating အားလုံးသည်ငွေပေးငွေယူကိုကျူးလွန်ခြင်းသို့မဟုတ်ပြန်လှိမ့်သည်အထိငွေပေးချေမှုတွင်လုပ်ဆောင်နေကြသည်။
Preprocessing ထုတ်ပြန်ချက်များကို အစပြု. ပြင်ဆင်ပါ။ MySQLI-> stmt_init () method ကိုသုံးပါ။ ထို့နောက် SQL query ကိုပြင်ဆင်ရန် $ stmt-> ပြင်ဆင် () နည်းလမ်းကိုသုံးပါ။
ဒေတာများကိုလုံခြုံစွာထည့်သွင်းရန် SQL ထုတ်ပြန်ချက်များရှိ parameter များကို parameter တွေကိုအားဖြည့်ရန် $ stmt-> bind_param () နည်းလမ်းကိုအသုံးပြုပါ။ ထို့နောက် Preprocessing Statement ကို execute လုပ်ရန် $ stmt-> execute () ကိုသုံးပါ။
ကျူးလွန်ခြင်းသို့မဟုတ် Relloback ငွေပေးငွေယူ - လုပ်ငန်းများအောင်မြင်မှုအားလုံးသည် ငွေ သွင်းခြင်းကိုကျူးလွန်ခြင်းနှင့်ပြုပြင်ခြင်းအားလုံးကိုဒေတာဘေ့စ်သို့သိမ်းပါ။ အကယ်. ကွပ်မျက်မှုတွင်အမှားအယွင်းများရှိပါကချွင်းချက်ချထားသည့်ချွင်းချက်ကိုပစ်ချလိုက်ပြီးငွေပေးချေမှုကို ဒေါ်လာ MySQLi-> Rollback () ကို ဖမ်း ယူပြီးယခင်စစ်ဆင်ရေးအားလုံးကိုရုပ်သိမ်းခြင်းကိုရုပ်သိမ်းခြင်း,
Collow Connection: စစ်ဆင်ရေးပြီးစီးပြီးနောက်ဒေတာဘေ့စ်ဆက်သွယ်မှုကို $ MySQLI-> အနီးကပ် () ကိုပိတ်ပါ။
MySQLI :: stmt_init ကို အရောင်းအ 0 ယ်ထိန်းချုပ်မှုဖြင့်ပေါင်းစပ်ခြင်းအားဖြင့်အောက်ပါအားသာချက်များကိုသင်ခံစားနိုင်သည်။
SQL Injection ကိုတားဆီးပါ။
စွမ်းဆောင်ရည်တိုးတက်အောင်ပြုလုပ်ခြင်း - ကြိုတင်ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များသည် Database တွင်ဝန်ထုပ်ဝန်ပိုးကိုလျှော့ချချိန်တွင် SQL ကိုထပ်ခါတလဲလဲပြုလုပ်ရန်မလိုအပ်ပါ။
ဒေတာရှေ့နောက်ညီညွတ်မှုကိုသေချာစေရန် - ငွေပေးငွေယူထိန်းချုပ်မှုမှတစ်ဆင့်ဒေတာလုပ်ဆောင်မှုလုပ်ငန်းများ၏အနုမြူဗုံးကိုသေချာစေရန်,
ခြွင်းချက်ကိုင်တွယ်ခြင်း - စစ်ဆင်ရေးအတွင်းအမှားတစ်ခုဖြစ်ပါက database သည်အကျင့်ပျက်ခြစားမှုမရှိသေးကြောင်းသေချာစေရန်ငွေပေးငွေယူကိုပြန်လှိမ့်နိုင်သည်။
MySQLI :: stmt_init function ကိုပေါင်းစပ်ခြင်းနှင့်ငွေပေးငွေယူထိန်းချုပ်မှုကိုပေါင်းစပ်ခြင်း ( စတင်ရန် - စတင်ခြင်း , ၎င်းသည် SQL Injection ပြ problems နာများကိုထိရောက်စွာရှောင်ရှားရန်သာမကဒေတာဘေ့စ်လုပ်ငန်းများပျက်ပြားသွားသောအခါဒေတာအကျင့်ပျက်ခြစားမှုကိုရှောင်ရှားသည့်အခါဒေတာရှေ့နောက်ညီညွတ်မှုကိုလည်းသေချာစေသည်။