ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် PHP ၏ MySQLI extension ကိုအသုံးပြုသောအခါ ကြိုတင်ပြင်ဆင်မှု () သည်အဓိကခြေလှမ်းတစ်ခုဖြစ်သည်။ အထူးသဖြင့်လုံခြုံရေးနှင့်စွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်အသုံးပြုသည်။ သို့သော် developer တချို့ကရှုပ်ထွေးသောပြ problem နာတစ်ခုနှင့်ကြုံတွေ့ရလိမ့်မည်။ SQL ထုတ်ပြန်ချက်များကိုမှန်ကန်စွာစာလုံးပေါင်းသည် ။ ဤဆောင်းပါးသည် MySQLI :: stmt_init function ကိုပေါင်းစပ်ပါလိမ့်မည်။
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("ဆက်သွယ်မှုမအောင်မြင်ပါ: " . $mysqli->connect_error);
}
$stmt = $mysqli->stmt_init();
$sql = "SELECT * FROM users WHERE id = ?";
if (!$stmt->prepare($sql)) {
die("Preprocessing မအောင်မြင်ပါ: " . $stmt->error);
}
SQL syntax မှန်ကန်သောလျှင်ပင်အထက်တွင် ပြင်ဆင်ထားသည့် () သည် တစ်ခါတစ်ရံ မှားယွင်းသော ကြောင့်အမှားအယွင်းများကိုဖြစ်ပေါ်စေသည်။ အောက်တွင်ဖော်ပြထားသောကျွန်ုပ်တို့သည် item မှ item ကို item item ကိုဆန်းစစ်လေ့လာပါ။
SQL ထုတ်ပြန်ချက်များသည်မှန်ကန်သောမှန်ကန်စွာမှန်ကန်စွာမှန်ကန်စွာမှန်ကန်စွာပြင်ဆင်ခြင်း, ပြင်ဆင်ခြင်း () ဒေတာဘေ့စ်တွင်မတည်ရှိပါက MySQL ဗားရှင်းအချို့တွင်မအောင်မြင်ပါက Database တွင်မတည်ရှိပါကရည်ညွှန်းသည်။ ဥပမာအားဖြင့်:
SELECT * FROM userz WHERE id = ?
Userz စားပွဲမတည်ရှိပါက ပြင်ဆင်ခြင်း () သည် syntax မှန်ကန်သောဖြစ်သော်လည်းအမှားတစ်ခုဖြစ်လာမည့်အမှားတစ်ခုဖြစ်လိမ့်မည်။
ဖြေရှင်းချက် - SQL တွင်ဇယားအမည်နှင့်ကွင်းဆင်းအမည်များသည်ဒေတာဘေ့စ်တွင်အမှန်တကယ်တည်ရှိသည်ကိုစစ်ဆေးပါ။
MySQL အသုံးပြုသူများသည် Syntax သည်အဆင်ပြေသော်လည်း ခွင့် ပြုချက် မလုံလောက် သော်လည်းခွင့်ပြုချက်မလုံလောက်သော်လည်းခွင့်ပြုချက်မလုံလောက်ပါ ။
ဖြေရှင်းချက် - ဒေတာဘေ့စ်အသုံးပြုသူသည် Target စားပွဲ၌ 0 င်ရောက်ရန်သက်ဆိုင်ရာခွင့်ပြုချက်များရှိကြောင်းသေချာစေပါ။
အကယ်. ဖော်ပြချက်သည်ရှုထောင့်တစ်ခုကိုရည်ညွှန်းသည်ဆိုပါကထိုအမြင်ရှိယုတ္တိဗေဒသည်ပြ problems နာများရှိနိုင်သည်သို့မဟုတ်ခွင့်ပြုချက်အကန့်အသတ်ရှိသောအရာဝတ်ထုများပေါ်တွင်မူတည်သည် ။
ဖြေရှင်းချက် - သူတို့ရဲ့ယုတ္တိဗေဒနှင့်ခွင့်ပြုချက်မှန်ကန်ကြောင်းသေချာစေရန်ပါ 0 င်ပတ်သက်သည့်အမြင်များသို့မဟုတ်အစပျိုးမှုကိုစစ်ဆေးပါ။
ကြေငြာချက်ကို ဒေါ်လာ mySQli-> stmt_init ()) နှင့်စတင်ခြင်းအပြီးတွင်ဒေတာဘေ့စ်ဆက်သွယ်မှုသည်သက်တမ်းကုန်ဆုံးနိုင်သော်လည်း ပြင်ဆင်ရန်ကြိုးစားနေဆဲဖြစ်သည်။
Solution: ဆက်သွယ်မှုသည် မှန်ကန် နေဆဲဖြစ်ပြီးပြန်လည်ချိတ်ဆက်မှုရှိ,
MySQL ပြင်ဆင်ခြင်း ()) သည် ထုတ်ပြန်ချက်များစွာပါ 0 င်သော strings များကိုမပံ့ပိုးပါ။
$sql = "SELECT * FROM users WHERE id = ?; DROP TABLE users;";
SQL တွင် SENTAX ကိုခွင့်ပြုသော်လည်း ပြင်ဆင်ပါ () တစ်ခုတည်းသောကြေညာချက်ကိုသာလက်ခံသည်။
WomeRound - SQL string တွင်ဖော်ပြချက်တစ်ခုတည်းကိုသာထည့်သွင်းထားကြောင်းသေချာပါစေ။
ဤပြ problem နာကို debug လုပ်ရန် $ stmt-> အမှားကို ကြည့်ခြင်းအပြင် $ MySQLI-> ERRESS ကို ကြည့်ရှုနိုင်သည်သို့မဟုတ်အသေးစိတ်အမှားအချက်အလက်များအတွက်ချွင်းချက်စနစ်ကိုဖွင့်နိုင်သည်။
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
၎င်းသည်အမှားတစ်ခုအဖြစ်ချွင်းချက်တစ်ခုအဖြစ်ပစ်ချပြီး debugging အတွက်ကူညီလိမ့်မည်။
ခက်ခဲသောဇယားနှင့်ကော်လံအမည်များကိုရှောင်ကြဉ်ပါ။
ပြင်ပ input ကို အခြေခံ. ပြင်ပ input များကို အခြေခံ. SQL ကြိုးများတည်ဆောက်ခြင်းကိုရှောင်ကြဉ်ပါ။
ကွပ်မျက်အသေးစိတ်ကိုခြေရာခံရန်ကူညီရန်ဖြန့်ကျက်မှုပတ်ဝန်းကျင်ရှိ SQL Logs ကိုဖွင့်ပါ။