PHP တွင်ဒေတာဘေ့စ်စစ်ဆင်ရေးအတွက် MySQLI extension ကိုအသုံးပြုသောအခါဒေတာများကိုထည့်သွင်းသောအခါအမှားများကိုထည့်သွင်းသောအခါအမှားများကိုတွေ့မြင်ရန်အဆန်းမဟုတ်ချေ။ ပြ problems နာများကိုလျင်မြန်စွာရှာဖွေရန်နှင့်ဖြေရှင်းရန်အတွက် MySQLI_STMT :: $ အမှား လုပ်ဆောင်ချက်သည်အလွန်အသုံးဝင်သောကိရိယာတစ်ခုဖြစ်သည်။ ဤဆောင်းပါးသည် mysqli_stmt ကိုမည်သို့အသုံးပြုရမည်ကိုလေ့လာလိမ့်မည်။
PHP တွင် MySQLI သည် MySQL database များနှင့်အပြန်အလှန်ဆက်သွယ်ရန်နည်းလမ်းများစွာရှိပြီး MySQLI_STMT သည် Proprocessing ထုတ်ပြန်ချက်များကိုအကောင်အထည်ဖော်ရန်အတန်းတစ်ခုဖြစ်သည်။ ဤနည်းအားဖြင့်စုံစမ်းမှုစွမ်းအားကိုတိုးတက်ကောင်းမွန်အောင်ပြုလုပ်နိုင်ပြီး SQL Injection ကိုလျှော့ချနိုင်သည်။ သို့သော်ဒေတာသွင်းခြင်းလုပ်ငန်းသည်အကြောင်းအမျိုးမျိုးကြောင့်ပျက်ကွက်နိုင်ပြီးဤအချိန်တွင်အမှား၏အကြောင်းရင်းကိုရှာဖွေရန်ဤအချိန်တွင်ကျွန်ုပ်တို့သည်ဤအချိန်တွင်အမှားအယွင်းများကိုရှာဖွေရန်လိုအပ်သည်။
MySQLI_STMT :: $ အမှား တစ်ခုဖြစ်ပြီးနောက်ဆုံး preprocessing statement လုပ်စရာမအောင်မြင်ကြောင်းအမှားသတင်းစကားကိုပြန်ပို့ပေးသည့် class attribute တစ်ခုဖြစ်သည်။ ၎င်းသည်ကျွန်ုပ်တို့အားသရုပ်ပြခြင်းနှင့်ပြ problem နာကိုဖြေရှင်းရန်အတွက်တိကျသောအမှားအချက်အလက်များကိုဖမ်းယူရန်နှင့်ပြသရန်ခွင့်ပြုသည်။
ပထမ ဦး စွာ MySQLI_STMMT ကို ကြည့်ရှုရန်မည်သို့အသုံးပြုရမည်ကိုကြည့်ကြပါစို့။ ကျွန်ုပ်တို့တွင် Database စားပွဲ အသုံးပြုသူ ရှိသည်ဆိုပါစို့။
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
email VARCHAR(100)
);
အချက်အလက်အသစ်တစ်ခုကိုကျွန်ုပ်တို့ထည့်သွင်းလိုသည်။
<?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
if ($stmt === false) {
die("Prepare failed: " . $mysqli->error);
}
$username = "john_doe";
$email = "[email protected]";
// parameters တွေကိုချည်ထား
$stmt->bind_param("ss", $username, $email);
// တစ်ခု insert စစ်ဆင်ရေးလုပ်ဆောင်ပါ
if (!$stmt->execute()) {
echo "Error: " . $stmt->error; // output error message
} else {
echo "Record inserted successfully!";
}
$stmt->close();
$mysqli->close();
?>
အထက်ပါကုဒ်များတွင်ကျွန်ုပ်တို့သည် execute () နည်းလမ်းပြီးနောက်၎င်း၏ပြန်လာတန်ဖိုးကိုစစ်ဆေးသည်။ အကယ်. သွင်းသွင်းခွဲစိတ်ကုသမှုပျက်ကွက်ပါက $ stmt-> အမှားသည် MySQL အမှားအယွင်းများကိုပြန်ပို့လိမ့်မည်။ ဤအချက်အလက်များကိုသင်ပုံနှိပ်ထုတ်ဝေရန်အကြောင်းပြချက်များကိုနားလည်ရန်သင်ပုံနှိပ်ထုတ်ဝေနိုင်သည်။ ဥပမာအားဖြင့်, ဒေတာဘေ့စ်သည် "ဒေတာကိုအဘို့အ data track's" ကဲ့သို့သောအမှားမက်ဆေ့ခ်ျကိုပြန်ပို့လျှင် "ဒေတာကို columnator email '" ကြောင့်လယ်ကွက်သည်မတိုက်ဆိုင်မှုကြောင့်ဖြစ်သည်။
ဤနည်းအားဖြင့်သင်သည်မှားသွားပြီး၎င်းကိုပြုပြင်ရန်အလိုရှိစွာသိနိုင်သည်။
အမှန်တကယ်အသုံးပြုမှုတွင်ဒေတာပျက်ကွက်မှုကိုထည့်သွင်းရန်အကြောင်းပြချက်များစွာရှိနိုင်သည်။ ဤတွင်အချို့သောအသုံးများသောအမှားများနှင့်သူတို့၏အကြောင်းပြချက်များမှာ -
MySQL ဒေတာဘေ့စ်ရှိကော်လံများတွင်တင်းကျပ်သောအချက်အလက်အမျိုးအစားကိုကန့်သတ်ချက်များရှိသည်။ အကယ်. သင်ထည့်သွင်းထားသောဒေတာအမျိုးအစားသည်ကော်လံနှင့်သတ်မှတ်ထားသောအမျိုးအစားနှင့်မကိုက်ညီပါကထည့်သွင်းမှုပျက်ပြားသွားလိမ့်မည်။ ဥပမာအားဖြင့်, အီးမေးလ် ကော်လံကို Varchar (100) အဖြစ်သတ်မှတ်သည်ဆိုပါစို့။ စာလုံးရေ 100 ကျော်နှင့်အီးမေးလ်လိပ်စာတစ်ခုထည့်ရန်သင်ကြိုးစားပါကအမှားတစ်ခုဖြစ်ပေါ်လိမ့်မည်ဆိုပါစို့။
$email = "a_very_long_email_address_that_exceeds_100_characters@example.com";
ဤအချိန်တွင် Execute ပျက်ကွက်ပြီးနောက် $ stmt-> အမှားသည် အောက်ပါနှင့်ဆင်တူသည့်အမှားသတင်းစကားကိုပြန်ပို့လိမ့်မည်။
Error: Data too long for column 'email' at row 1
ဒေတာဘေ့စ်စားပွဲတွင်ကွက်လပ် ( username ) သည်ထူးခြားသောကန့်သတ်ထားပါက, ဤအချိန်တွင်သွင်းသွင်းခြင်းလုပ်ငန်းသည်အမှားသတင်းစကားဖြင့်အောက်ပါအတိုင်းပျက်ကွက်လိမ့်မည် -
Error: Duplicate entry 'john_doe' for key 'username'
ကော်လံသည် Null အတားအဆီးမဟုတ်ဘဲ null value ကိုထည့်သွင်းရန်ကြိုးစားပါက, ဥပမာအားဖြင့်, အသုံးပြုသူအမည် ကော်လံကိုအချည်းနှီးဖြစ်စေရန်ခွင့်မပြုပါကအချည်းနှီးသော string ကိုသို့မဟုတ် null ထည့်ရန်ကြိုးစားခြင်းသည်အမှားတစ်ခုဖြစ်ပေါ်လိမ့်မည်။
$username = NULL;
အမှားမက်ဆေ့ခ်ျကိုအောက်ပါအတိုင်းဖြစ်နိုင်သည် -
Error: Column 'username' cannot be null
ဟုတ်ပါတယ်, SQL Syntax အမှားအယွင်းများကြောင့်သွင်းကုန်ပျက်ကွက်မှုဖြစ်နိုင်သည်။ $ stmt-> အမှားကို ကြည့်ခြင်းအားဖြင့်တိကျသော SQL အမှားအချက်အလက်များကိုသင်ရနိုင်သည်။
သင်အမှားမက်ဆေ့ခ်ျကိုဖမ်းယူပြီးတာနဲ့သင်ကပြန်လာသောအမှားမက်ဆေ့ခ်ျကို အခြေခံ. ၎င်းကိုသင်လုပ်ဆောင်နိုင်သည်။ ဥပမာအားဖြင့်:
ဒေတာအမျိုးအစားသည်မကိုက်ညီပါက,
အကယ်. ၎င်းသည်ထူးခြားသောကန့်သတ်ချက်ပ conflict ိပက်ခဖြစ်လျှင်ဒေတာရှိပြီးသားရှိမရှိစစ်ဆေးရန်လိုအပ်နိုင်သည်။
အကယ်. ၎င်းသည် Null Capancy ပြ problem နာဖြစ်လျှင်လိုအပ်သောလယ်ကွင်းများကိုမှန်ကန်စွာသတ်မှတ်ထားကြောင်းသေချာစေရန်လိုအပ်သည်။
MySQLI_STMT :: $ အမှား နှင့်အတူဒေတာသွင်းစစ်ဆင်ရေးများတွင်ပြ problems နာများကိုသင်အလွယ်တကူဖမ်းယူနိုင်ပြီး debug များကိုသင်အလွယ်တကူဖမ်းယူနိုင်သည်။ ၎င်းသည်အမှားအယွင်းများ၏အကြောင်းရင်းကိုလျင်မြန်စွာရှာဖွေရန်, အမှားမက်ဆေ့ခ်ျများကိုစစ်ဆေးခြင်းဖြင့် SQL အမှားကုဒ်များကိုပေါင်းစပ်ပြီးဒေတာဘေ့စ်စားပွဲများအတွက်အဓိပ္ပါယ်ဖွင့်ဆိုချက်ကိုပေါင်းစပ်ခြင်းအားဖြင့်သင်သည်မအောင်မြင်မှုများကိုလျင်မြန်စွာဖြေရှင်းနိုင်သည်။
MySQLI_STMT :: $ အမှား စနစ်ကို အသုံးပြု. PHP နှင့် MySQL တို့အကြားအပြန်အလှန်ဆက်သွယ်မှုကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်နိုင်ပြီးပိုမိုတည်ငြိမ်ပြီးခိုင်မာသည့် applications များတည်ဆောက်ခြင်းကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်နိုင်သည်။