MySQL databases များကိုလုပ်ကိုင်ရန် PHP ကိုအသုံးပြုသောအခါကြိုတင်ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များသည် SQL Injection ကိုထိရောက်စွာကာကွယ်နိုင်ပြီးလုံခြုံရေးနှင့်ကုဒ်ထိန်းသိမ်းခြင်းကိုတိုးတက်စေသည်။ သို့သော်အရေးအသားစဉ်အတွင်းအမှားအယွင်းများသည်အရေးအသားစဉ်အတွင်းဖြစ်ပေါ်နိုင်ပြီး syntax အမှားများ,
ဤပြ problems နာများကိုလျင်မြန်စွာရှာဖွေရန် MySQLI_STMT :: $ အမှား သည်အလွန်အသုံးဝင်သော debugging tool တစ်ခုဖြစ်သည်။ ၎င်းသည် MySQLI_STMT အတန်းထဲတွင်အိမ်ခြံမြေတစ်ခုဖြစ်သည်။ Execution Statements ပျက်ကွက်သောအခါ developer များကိုလျင်မြန်စွာရှာဖွေရန်အတွက်အထူးအမှားအချက်အလက်များကိုပြန်ပို့နိုင်သည်။
MySQLI_STMMT :: $ အမှားအယွင်းကို အသုံးပြု. အခြေခံဥပမာတစ်ခုရှိသည်။
<?php
$mysqli = new mysqli("localhost", "db_user", "db_pass", "test_db");
if ($mysqli->connect_errno) {
die("ဆက်သွယ်မှုမအောင်မြင်ပါ: " . $mysqli->connect_error);
}
$sql = "INSERT INTO users (username, email) VALUES (?, ?)";
$stmt = $mysqli->prepare($sql);
if (!$stmt) {
die("Preprocessing မအောင်မြင်ပါ: " . $mysqli->error);
}
// မှားယွင်းစွာ binding parameter သည် parameter သည်ရေးသားခဲ့သည်:နှစ်ခု parameters တွေကိုချည်နှောင်သင့်ကြောင်းယူဆ,ဒီမှာတစ်ခုသာချည်နေသည်
$stmt->bind_param("s", $username);
$username = "alice";
$email = "[email protected]";
if (!$stmt->execute()) {
// အသုံးပြု mysqli_stmt::$error output ကိုအသေးစိတ်အမှား
echo "Execution မအောင်မြင်ပါ: " . $stmt->error;
}
$stmt->close();
$mysqli->close();
?>
output ကိုဆင်တူသည် -
Execution မအောင်မြင်ပါ: Number of variables doesn't match number of parameters in prepared statement
ဤအမှားသည်မှားယွင်းစွာမတိုက်ဆိုင်မှုပြ problem နာကိုရှင်းလင်းစွာထောက်ပြသည်။
အောက်ပါအခြေအနေများတွင် debugging လုပ်ရန်ဤပစ္စည်းများကိုသင်အသုံးပြုနိုင်သည်။
preprocessing ကြေညာချက်ဖန်တီးမှုမအောင်မြင်သည့်အခါ အမှားအချက်အလက်များရရန် $ MySQLI-> အမှားကို သုံးပါ။
parameter သည် binding binding သို့မဟုတ်အရေအတွက်မတိုက်ဆိုင်မှုမအောင်မြင်သောအခါ
bind_param () သူ့ဟာသူအမှားတစ်ခု က သတင်းပို့လိမ့်မည်မဟုတ်ပါ,
ကွပ်မျက်မှုပျက်ကွက်ခြင်း (ထူးခြားသောကန့်သတ်ချက်များကိုချိုးဖောက်လျှင်)
ဥပမာအားဖြင့်, ထပ်တူအီးမေးလ်ကိုထည့်သွင်းရန်ကြိုးစားသောအခါ $ stmt-> အမှားသည် တစ်ခုခုကိုပြန်ပို့လိမ့်မည်
"[email protected] '[email protected]' email 'အတွက်' 'for Email' အတွက်အကြံပြုချက်များ။
နောက်ဆက်တွဲပြ troubl နာဖြေရှင်းခြင်းအတွက်မှတ်တမ်းသို့သင်သတင်းအချက်အလက်အချက်အလက်များကိုလည်းသင် log in လုပ်နိုင်သည်။
if (!$stmt->execute()) {
error_log("အကောင်အထည်ဖော်မှုအမှား preprocessing: " . $stmt->error);
}
၎င်းသည်ထုတ်လုပ်မှုပတ် 0 န်းကျင်ရှိသုံးစွဲသူများအတွက်အမှားများကိုဖော်ထုတ်ခြင်းကိုရှောင်ရှားနိုင်ပြီးပြ problems နာများကိုဖြေရှင်းရန် developer များကိုလည်းလွယ်ကူချောမွေ့စေသည်။
ပြန်မမှားပါစေနှင့် မလွယ်ကူပါကအသေးစိတ်အချက်အလက်များကို error attribute နှင့်ပေါင်းစပ်ကြည့်ပါ။
ဖွံ့ဖြိုးတိုးတက်မှုအဆင့်သည်အမှားအယွင်းများကိုတိုက်ရိုက်ထုတ်လွှတ်နိုင်သည်။ သစ်လုံးများကိုထုတ်လုပ်မှုပတ် 0 န်းကျင်တွင်မှတ်တမ်းတင်သင့်သည်။
Errno နှင့် အသုံးပြု. အသေးစိတ်ဆုံးဖြတ်ချက်များအတွက်အမှားကုဒ်များကိုသင်ရနိုင်သည်။
MySQLI_STMT ::: $ အမှား သည်ကြိုတင်ပြင်ဆင်ထားသောထုတ်ပြန်ချက်များကို debugging လုပ်ခြင်းအတွက်အလွန်လက်တွေ့ကျသောကိရိယာတစ်ခုဖြစ်သည်။ ၎င်းမှတစ်ဆင့်ကြေငြာချက်သည်အဘယ်ကြောင့်ပျက်ကွက်ခြင်းများကြောင့်အဘယ်ကြောင့်ပျက်ကွက်ခြင်းနှင့်ပြ troubl နာဖြေရှင်းခြင်းအချိန်ကိုလျှော့ချခြင်းအားဖြင့်သင်လျင်မြန်စွာသိနိုင်သည်။
ဖွံ့ဖြိုးတိုးတက်မှုလုပ်ငန်းစဉ်အတွင်းဤ attribute ကိုအသုံးပြုခြင်းသည်သင့် database interaction ကိုပိုမိုခိုင်မာသည့်နှင့်ယုံကြည်စိတ်ချရမှုကိုပိုမိုဖြစ်ပေါ်စေလိမ့်မည်။