လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MySQLI_STMMT :: $ အမှားအယွင်းကို အသုံးပြု. ပိုမိုတည်ငြိမ်သောဒေတာဘေ့စ်ဝင်ရောက်လာသောအလွှာတစ်ခုကိုမည်သို့ရေးရမည်နည်း

MySQLI_STMMT :: $ အမှားအယွင်းကို အသုံးပြု. ပိုမိုတည်ငြိမ်သောဒေတာဘေ့စ်ဝင်ရောက်လာသောအလွှာတစ်ခုကိုမည်သို့ရေးရမည်နည်း

gitbox 2025-05-28

PHP Development တွင် Database Access သည်အထူးသဖြင့်စီမံကိန်းတစ်ခုတွင်စီမံကိန်းတစ်ခုလိုအပ်သည့်စစ်ဆင်ရေးများစွာလိုအပ်သည့်အခါ, ဒေတာဘေ့စ်၏တည်ငြိမ်မှုနှင့်အမှားအယွင်းများသည်အထူးအရေးကြီးသည်။ MySQLI သည် PHP တွင်အသုံးများသောဒေတာဘေ့စ်တိုးချဲ့မှုဖြစ်သည်။ developer များထိရောက်သောနှင့်ယုံကြည်စိတ်ချရသောဒေတာဘေ့စ် 0 င်ရောက်ရှိမှုကိုရရှိရန်ကူညီရန်အသုံးဝင်သောလုပ်ဆောင်ချက်အချို့ကိုပေးသည်။

ဤဆောင်းပါးတွင် MySQLI_STMTT :: Database Access အလွှာ၏တည်ငြိမ်မှုကိုတိုးတက်စေရန် $ အမှား လုပ်ဆောင်ပုံကိုလေ့လာပါမည်။ MySQLI_STMT :: $ အမှား သည် MySQLI_STMT အတန်းထဲတွင်အိမ်ခြံမြေတစ်ခုဖြစ်ပြီး Proprocessing ထုတ်ပြန်ချက်များအကောင်အထည်ဖော်သည့်အခါဖြစ်ပေါ်လာသောအမှားအချက်အလက်များကိုရရှိရန်အသုံးပြုသောပစ္စည်းတစ်ခုဖြစ်သည်။ ဤပိုင်ဆိုင်မှုကိုသင့်လျော်စွာအသုံးပြုခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်အမှားအယွင်းများကိုထိရောက်စွာဖမ်းယူနိုင်ပြီးဒေတာဘေ့စ် 0 င်ရောက်နိုင်သည့်အချိန်တွင်ချွင်းချက်များကိုစနစ်တကျစီမံခန့်ခွဲနိုင်ပြီးစနစ်တည်ငြိမ်မှုကိုတိုးတက်စေနိုင်သည်။

MySQLI_STMT :: $ အမှားက ဘာလဲ။

PHP တွင် MySQLI_STMT အတန်းကိုပြင်ဆင်ထားသည့်ဖော်ပြချက်များကိုပြုလုပ်ရန်အသုံးပြုသည်။ Preprocessing ထုတ်ပြန်ချက်များအားဖြင့် SQL Injection Attacks ကိုရှောင်ရှားနေစဉ်ကျွန်ုပ်တို့သည်စုံစမ်းမှု၏စွမ်းဆောင်ရည်ကိုတိုးတက်စေနိုင်သည်။ MySQLI_STMT :: $ error attribute ကိုပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များကိုအကောင်အထည်ဖော်သည့်အခါအမှားအချက်အလက်များကိုရရှိရန်အသုံးပြုသည်။ အကယ်. ကွပ်မျက်သည်အောင်မြင်လျှင်၎င်းသည်အချည်းနှီးသော string ကိုပြန်ပို့သည်။ အကယ်. Execution ပျက်ကွက်ပါကအမှားအယွင်းကိုဖော်ပြသည့် string ကိုပြန်ပို့သည်။

နမူနာကုဒ်:

 <?php
// ဒေတာဘေ့စ်ကိုဆက်သွယ်ပါ
$mysqli = new mysqli('localhost', 'username', 'password', 'database');

// ဆက်သွယ်မှုအောင်မြင်မှုရှိမရှိစစ်ဆေးပါ
if ($mysqli->connect_error) {
    die("ဆက်သွယ်မှုမအောင်မြင်ပါ: " . $mysqli->connect_error);
}

// ပြင်ဆင်ထား SQL အသေအချာပေြာဆိုချက်
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if ($stmt === false) {
    die('ပြင်ဆင်ထားအသေအချာပေြာဆိုချက်失败: ' . $mysqli->error);
}

// parameters တွေကိုချည်ထား
$id = 1;
$stmt->bind_param("i", $id);

// 执行အသေအချာပေြာဆိုချက်
$stmt->execute();

// အမှားများကိုစစ်ဆေးပါ
if ($stmt->error) {
    die('执行အသေအချာပေြာဆိုချက်失败: ' . $stmt->error);
} else {
    echo "အောင်မြင်သောစုံစမ်းမှု!";
}

// 关闭အသေအချာပေြာဆိုချက်和连接
$stmt->close();
$mysqli->close();
?>

အပေါ်ကဥပမာမှာဒေတာဘေ့စ် connection ကိုပထမ ဦး ဆုံးတည်ဆောက်ပြီး SQL query တစ်ခုကိုအရင်ချမှတ်ပါ။ ထို့နောက် bind_param မှတစ်ဆင့်သတ်မှတ်ချက်များကိုချည်နှောင်ပြီးကြေညာချက်ကိုကွပ်ကဲပါ။ $ stmt-> အမှား ပိုင်ဆိုင်မှုမှတစ်ဆင့်မှာကွပ်မျက်စဉ်အမှားတစ်ခုဖြစ်ပွားခြင်းရှိမရှိစစ်ဆေးသည်။ အမှားတစ်ခုရှိပါကအမှားမက်ဆေ့ခ်ျကိုထုတ်လွှင့်ခြင်းနှင့်ကွပ်မျက်ခြင်းကိုရပ်တန့်ပါ။

MySQLI_STMMT :: $ အမှားအယွင်းကို အသုံးပြု. တည်ငြိမ်မှုကိုတိုးတက်အောင်ဘယ်လိုလုပ်ရမလဲ။

1 ။ ပရိုဂရမ်ပျက်ကျမှုကိုရှောင်ရှားရန် SQL အမှားများကိုဖမ်းပါ

MySQLI_STMT :: $ အမှားသည် SQL သတ်သေခြင်းမှအမှားများကိုဖမ်းယူနိုင်ပြီးဒေတာဘေ့စ်အမှားပေါ်ပေါက်လာသည့်အခါပရိုဂရမ်ကို crashing မှတားဆီးနိုင်သည်။ $ stmt-> အမှားသည် ဗလာကျရှိမရှိကိုဆုံးဖြတ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်ပြ problem နာကိုအချိန်မီရှာဖွေတွေ့ရှိနိုင်ပြီးအမှားကိုဆက်လက်မပြန့်ပွားစေရန်ကာကွယ်ရန်အချက်များပေးနိုင်သည်။

နမူနာကုဒ်:

 <?php
$stmt = $mysqli->prepare("UPDATE users SET name = ? WHERE id = ?");
if ($stmt === false) {
    die("ပြင်ဆင်ထားအသေအချာပေြာဆိုချက်失败: " . $mysqli->error);
}

// အမှားတစ်ခုပုံဖော်ပါ
$name = 'John Doe';
$id = 'invalid_id';  // ဒီမှာယူဆတယ် ID အားမရှိသော

$stmt->bind_param("si", $name, $id);
$stmt->execute();

// ကွပ်မျက်အောင်မြင်မှုရှိမရှိစစ်ဆေးပါ
if ($stmt->error) {
    die("အသစ်ပြောင်းခြင်းမအောင်မြင်ပါ: " . $stmt->error);
}
echo "အောင်မြင်စွာအသစ်ပြောင်းခြင်း!";
?>

ဤကုဒ်တွင် SQL အမှားတစ်ခုဖြစ်ပါကသို့မဟုတ်ကွပ်မျက်မှုမအောင်မြင်ပါကဒေတာဘေ့စ်လည်ပတ်မှုပျက်ကွက်ခြင်းကြောင့်ပရိုဂရမ်ပျက်ခြင်းမရှိသေးပါ။

2 ။ ဒေတာဘေ့စ်ဆက်သွယ်မှုတည်ငြိမ်မှုကိုတိုးတက်အောင်လုပ်ပါ

MySQLI_STMT :: $ အမှားသည် ဒေတာဘေ့စ်ဆက်သွယ်မှုတည်ငြိမ်မှုကိုတိုးတက်စေနိုင်သည်။ ဥပမာအားဖြင့်, database တစ်ခုဝင်ရောက်လာသောအခါဆက်သွယ်မှုအမှားများသည်သာမန်ခြွင်းချက်များဖြစ်သည်။ MySQLI_STMT :: $ အမှားသည် လုပ်ဆောင်မှုပျက်ကွက်မှုကြောင့်နောက်ဆက်တွဲစစ်ဆင်ရေးများကိုရှောင်ရှားနိုင်ရန်အတွက်ဒေတာဘေ့စ်ဆက်သွယ်မှုအခြေအနေကိုအချိန်မီစစ်ဆေးနိုင်သည်။

နမူနာကုဒ်:

 <?php
// ဒေတာဘေ့စ်ကိုဆက်သွယ်ပါ时အမှားများကိုစစ်ဆေးပါ
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
if ($mysqli->connect_error) {
    die("ဆက်သွယ်မှုမအောင်မြင်ပါ: " . $mysqli->connect_error);
}

// ဒေတာဘေ့စ်စုံစမ်းမှုကို execute လုပ်ပါ
$query = "SELECT * FROM non_existent_table";
$result = $mysqli->query($query);

// စုံစမ်းမှုကွပ်မျက်အောင်မြင်မှုရှိမရှိစစ်ဆေးပါ
if (!$result) {
    die("စုံစမ်းမှုမအောင်မြင်ပါ: " . $mysqli->error);
}

while ($row = $result->fetch_assoc()) {
    echo "အသုံးပြုသူ: " . $row['name'];
}

$mysqli->close();
?>

ဤဥပမာတွင်ကျွန်ုပ်တို့သည်စုံစမ်းမှုမရှိသေးသည့်ဇယားကိုတမင်တကာလုပ်ဆောင်သည်။ $ MySQLI-> အမှား နှင့် အမှားအယွင်းများကို စစ်ဆေးခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်အမှားအယွင်းများကိုအချိန်မီအမှားများကိုဖမ်းယူနိုင်ပြီးအစီအစဉ်ကိုမမှန်ကန်သောစစ်ဆင်ရေးများဆက်လက်လုပ်ဆောင်ခြင်းကိုတားဆီးနိုင်သည်။

3 ။ မှတ်တမ်းတင်ခြင်းနှင့်အမှားစောင့်ကြည့်ခြင်း

Front End တွင်အမှားအယွင်းများပြသသည့်အပြင် developer များသည်လည်းအနာဂတ်ပြ troubl နာဖြေရှင်းခြင်းနှင့်စောင့်ကြည့်လေ့လာခြင်းကိုလွယ်ကူချောမွေ့စေရန် Log ရှိအမှားအယွင်းများကိုမှတ်တမ်းတင်နိုင်သည်။ MySQLI_STMT :: developer များကခွဲခြမ်းစိတ်ဖြာခြင်းနှင့်ဆုံးဖြတ်ချက်အတွက် $ error ကို $ for error မှတဆင့်ရရှိသောအမှားအချက်အလက်များကိုမှတ်တမ်းဖိုင်သို့ရေးသားနိုင်သည်။

နမူနာကုဒ်:

 <?php
// စုံစမ်းမှုလုပ်ဆောင်သော code သည်အရင်ကဲ့သို့တူညီသောဖြစ်သည်ဟုယူဆပါ
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();

// အမှားများကိုစစ်ဆေးပါ并သစ်ခုတ်
if ($stmt->error) {
    // သစ်ခုတ်
    error_log("စုံစမ်းမှုမအောင်မြင်ပါ: " . $stmt->error, 3, '/path/to/error.log');
    die("အမှားတစ်ခုဖြစ်ပွားခဲ့သည်,ကျေးဇူးပြု. နောက်မှထပ်ကြိုးစားပါ。");
}
?>

ဤနည်းအားဖြင့်အမှားအယွင်းများကို log file သို့စာဖြင့်ရေးသားလိမ့်မည်။

အကျဉ်းချုပ်

MySQLI_STMT :: $ အမှား သည် PHP တွင် PHP တွင်အလွန်လက်တွေ့ကျသောပိုင်ဆိုင်မှုတစ်ခုဖြစ်သည်။ ဤ attribute ကိုဆင်ခြင်တုံတရားဖြင့်အသုံးချခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်ဒေတာဘေ့စ်ဝင်ရောက်လာသောအလွှာ၏တည်ငြိမ်မှုကိုမြှင့်တင်ပေးရုံသာမကလျှောက်လွှာ၏ကြံ့ခိုင်မှုကိုမြှင့်တင်ပေးနိုင်သည်။ အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်ဒေတာဘေ့စ်လုပ်ငန်းများတည်ငြိမ်မှုကိုသေချာစေရန်အလွန်အရေးကြီးသည်။