PHP ပရိုဂရမ်တွင် MySQLI extension ကို MySQL database နှင့်အပြန်အလှန်ဆက်သွယ်ရန်အသုံးပြုသည်။ MySQLI_STMT သည်အရေးမကြီးသောထုတ်ပြန်ချက်များကိုမကြာခဏအသုံးပြုလေ့ရှိသည်။ MySQLI_STMT :: $ အမှား သည် SQL ထုတ်ပြန်ချက်များကိုအကောင်အထည်ဖော်သည့်အခါဖြစ်ပေါ်လာသောအမှားသတင်းကိုပြန်ပေးသည့် MySQLI_STMT Object တွင်ပစ္စည်းတစ်ခုဖြစ်သည်။ အကယ်. SQL Execution သည်အောင်မြင်လျှင် $ အမှားသည် အချည်းနှီးဖြစ်လိမ့်မည်။ အမှားတစ်ခုဖြစ်ပါကပြ problems နာများကိုဖြေရှင်းရန် developer ကိုလွယ်ကူချောမွေ့စေရန်အသေးစိတ်အမှားအချက်အလက်များပါ 0 င်မည်ဖြစ်သည်။
သို့သော် MySQLI_STMT ကို အသုံးပြုသောအခါ developer များသည်အချို့သောထောင်ချောက်အချို့ကိုကြုံတွေ့ရနိုင်သည်။ ဤဆောင်းပါးသည်ဤပြ problems နာများကိုဆွေးနွေးပါမည်။
အရောင်းအ 0 ယ်များတွင် MySQLI သည် database အရောင်းအ 0 ယ်များကိုစီမံခန့်ခွဲရန် စတင်ရန် ( ) , ငွေပေးချေမှုဆိုင်ရာအသေခံခြင်းအတွင်းအမှားတစ်ခုဖြစ်ပါကအချက်အလက်မကိုက်ညီစေရန် Rollback () ကို အသုံးပြု. ငွေပေးငွေယူကိုပြန်လှိမ့်ချထားသင့်သည်။ သို့သော် အကယ်. MySQLI_STMT ကိုသင်သာအားကိုးပါကငွေပေးချေမှုသည်အောင်မြင်မှုရှိ, ရှိမရှိဆုံးဖြတ်ရန်အမှားအယွင်းများကိုလွဲချော်စေနိုင်သည်။
MySQLI ::: :: အမှားတစ်ခုဖြစ်ပေါ်လျှင်အမှားတစ်ခုဖြစ်ပေါ်သည့်အခါငွေပေးငွေယူကိုအမြဲတမ်းပြန်လှိမ့်ပါကစစ်ဆေးရန် MySQLI :: errno ကို သုံးပါ။ ၎င်းသည်အမှားအယွင်းများဖြစ်ပေါ်နေသောမည်သည့်နေရာတွင်ရှိနေပါစေသူတို့ကအချိန်မီကိုင်တွယ်နိုင်သည်။
$mysqli->begin_transaction();
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
$stmt->bind_param("ss", $username, $email);
if (!$stmt->execute()) {
echo "Error executing query: " . $stmt->error;
$mysqli->rollback(); // အမှားတစ်ခုဖြစ်ပေါ်လျှင်,ပြန်အရောင်းအလှိမ့်
exit();
}
// အရာအားလုံးအဆင်ပြေလျှင်,တင်သွင်းမှုတင်သွင်း
$mysqli->commit();
MySQLI_STMT :: $ အမှားသည် ထုတ်ပြန်ချက်တစ်ခုတည်းကွပ်မျက်မှုတစ်ခုတည်းအတွက်အမှားအချက်အလက်များကိုသာပြန်လည်ပေးပို့သည်, ငွေပေးငွေယူတစ်ခုလုံး၏အမှားများကိုမဖုံးကွယ်ပါ။ အကယ်. သင်သည်ထုတ်ပြန်ချက်များစွာကိုသင်လုပ်ပြီးအမှားများကိုစစ်ဆေးရန်အတွက် ဒေါ်လာ stmt-> အမှားကို သာအားကိုးပါကငွေပေးချေမှု၏အမှားအယွင်းကိုသင်လွဲချော်နိုင်သည်။
MySQLI သည် အရောင်းအ 0 ယ်များကိုဒေတာဘေ့စ်ဆက်သွယ်မှုမျိုးစုံဖြင့်လုပ်ဆောင်ရန်ခွင့်ပြုသည်။ developer တစ် ဦး သည်ငွေပေးငွေယူတစ်ခုလုပ်ဆောင်သောအခါသူသည်ဆက်သွယ်မှုတစ်ခုပေါ်တွင်မှားယွင်းစွာစတင်ပြီးအခြားဆက်သွယ်မှုတစ်ခုတွင်ရှာဖွေမှုတစ်ခုပြုလုပ်နိုင်သည်။ MySQLI_STMT :: $ အမှားအယွင်းများ သည်မတူညီသောဆက်သွယ်မှုများအပေါ်လုပ်ဆောင်မှုအပေါ်အမှားအယွင်းများဖြစ်ပေါ်နေပါကအမှားတစ်ခုဖြစ်ပါကအမှားအယွင်းများကိုအချိန်မီသိမ်းဆည်းရမိမည်မဟုတ်ပါ။
ငွေပေးငွေယူမှု၏လုပ်ဆောင်မှုအားလုံးတွင်တူညီသော database connection တွင်ဖျော်ဖြေတင်ဆက်ကြောင်းသေချာပါစေ။ ငွေပေးငွေယူတစ်ခုလုံး၏အခြေအနေကိုအလားတူဆက်သွယ်မှုကိုသေချာစေရန် MySQLI Object Connection ကိုသုံးနိုင်သည်။
$mysqli->begin_transaction(); // အရောင်းအ 0 ယ်အားလုံးအလားတူဆက်သွယ်မှုတွင်ဖျော်ဖြေကြသည်သေချာအောင်လုပ်ပါ
$stmt1 = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
$stmt1->bind_param("ss", $username, $email);
$stmt2 = $mysqli->prepare("INSERT INTO orders (user_id, amount) VALUES (?, ?)");
$stmt2->bind_param("id", $user_id, $amount);
// လုပ်ဆောင်ချက်တစ်ခုလုပ်ဆောင်ပါ
if (!$stmt1->execute() || !$stmt2->execute()) {
echo "Error executing queries: " . $mysqli->error;
$mysqli->rollback();
exit();
}
$mysqli->commit(); // တင်သွင်းရန်သေချာပါစေ
၎င်းသည်ဒေတာဘေ့စ်လုပ်ငန်းများကိုတူညီသောဆက်သွယ်မှုတစ်ခုအောက်တွင်ပြုလုပ်ထားကြောင်းသေချာစေပြီး connection-connection ငွေပေးငွေယူစီမံခန့်ခွဲမှုများကိုရှုပ်ထွေးစေသည်။
MySQL တွင်အမှားအယွင်းများအရအမှားအယွင်းများကိုကွဲပြားခြားနားသောအမျိုးအစားများအဖြစ်ခွဲခြားထားသည်။ အမှားအယွင်းများသည်ဆိုးဝါးစွာသေစေနိုင်သည်။ အခြားသူများကသင့်အားဆက်လက်လုပ်ဆောင်ရန်ခွင့်ပြုသည့်သတိပေးချက်များရှိစဉ်။ MySQLI_STMT :: $ အမှားသည် SQL Error Messages ကိုသာပြန်လည်ပေးလိမ့်မည်။ သို့သော်အမှား၏ပြင်းထန်မှုကိုသင့်အားမပြောနိုင်ပါ။
ငွေပေးချေမှုတစ်ခုတွင် MySQLI_STMT :: $ အမှားသည် အချည်းနှီးဖြစ်သည်။ ထို့နောက်အမှားအမျိုးအစားပေါ်မူတည်ပြီးသင့်လျော်သောအရေးယူမှုကိုပြုလုပ်ပါ။ အကယ်. ၎င်းသည်ဆိုးဝါးသောအမှားဖြစ်ပါကငွေပေးငွေယူကိုပြန်လှိမ့်သင့်သည်။ အကယ်. ၎င်းသည်သတိပေးချက်အမှားတစ်ခုဖြစ်ပါကဆက်လက်လုပ်ဆောင်ရန်သင်ရွေးချယ်နိုင်သည်။
if (!$stmt1->execute()) {
if ($stmt1->errno) {
echo "Fatal error: " . $stmt1->error;
$mysqli->rollback(); // 致命错误时ပြန်အရောင်းအလှိမ့်
exit();
} else {
echo "Warning: " . $stmt1->error;
// သင်သည်အခြားစစ်ဆင်ရေးများကိုဆက်လက်လုပ်ဆောင်ရန်ရွေးချယ်နိုင်သည်
}
}
MySQLI 's Preprocessing ထုတ်ပြန်ချက်များသည် SQL Injection Attack ကိုမသုံးပါက SQL Injection Attack ကိုမသုံးပါက SQL Injection () နည်းလမ်းကိုမှန်ကန်စွာအသုံးမပြုပါက application သည် SQL Injection Attacks ၏အန္တရာယ်နှင့်ထိတွေ့သွားလိမ့်မည်။ MySQLI_STMT ကိုသင်အသုံးပြုနေလျှင်ပင်သင်၏ငွေပေးငွေယူတွင်အမှားအယွင်းများကိုဖမ်းရန် $ အမှားများကိုဖမ်းရန်,
parameter ၏ဒေတာအမျိုးအစားကိုမှန်ကန်စွာသတ်မှတ်ရန်သေချာစေရန် parameters တွေကိုမှန်ကန်စွာသတ်မှတ်ရန် parameters တွေကိုအားဖြည့်ရန် bind_param ()) သို့မဟုတ် bind_value () နည်းလမ်းများကိုအမြဲတမ်းသုံးပါ။
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username); // Username Parametersceters bind,တားဆီး SQL သွင်းခြင်း
$stmt->execute();
ဤနည်းအားဖြင့်အချို့သောအမှားများကိုဖမ်းမိလျှင်ပင်ဒေတာဘေ့စ်၏ဖွဲ့စည်းပုံသို့မဟုတ်အထိခိုက်မခံသောသတင်းအချက်အလက်များကိုတိုက်ခိုက်သူနှင့်ထိတွေ့ခြင်းမပြုရ။
MySQLI_STMT :: $ အမှားအယွင်းများကို အသုံးပြုသောအခါ developer များက data formission ကိုဖြစ်ပေါ်စေသောပျက်ကွက်မှုများကိုရှောင်ရှားရန်အရောင်းအ 0 ယ်များတွင်အမှားအယွင်းများကိုကိုင်တွယ်ရန်သတိထားရန်လိုအပ်သည်။ အသုံးအများဆုံးကျော့ကွင်းများတွင် - အရောင်းအ 0 ယ်များသည်မတူကွဲပြားသောဆက်သွယ်မှုများအောက်တွင်ငွေပေးချေမှုစီမံခန့်ခွဲမှုပုံစံများကိုလျစ်လျူရှုခြင်း, ကျိုးကြောင်းဆီလျော်သောအမှားဖြင့်ပြုလုပ်ထားသောအမှားများဖြင့်ဤပြ problems နာများကိုပိုမိုကျိုးကြောင်း ဆီ လျော်စွာကိုင်တွယ်ခြင်းဖြင့်အလွန်လျှော့ချနိုင်သည်။