PHP Development တွင် MySQLI ကို အသုံးပြုခြင်းသည်ဒေတာဘေ့စ်များ၏လည်ပတ်မှုကိုတိုးချဲ့ရန်အတွက် MySQLI ကိုအသုံးပြုခြင်းသည်ဘုံနှင့်ထိရောက်သောနည်းဖြစ်သည်။ အထူးသဖြင့်ကျွန်ုပ်တို့အနေဖြင့်ထည့်သွင်းမှုပြုလုပ်သောစစ်ဆင်ရေးကိုလုပ်ဆောင်ပြီးနောက် ဒေါ်လာ MySQLI-> Insert_id ကို သုံး. ပြန်လည်ထည့်သွင်းထားသောမှတ်တမ်း၏အလိုအလျောက်တိုးပွားလာသော ID ကိုရရှိရန်အတွက်ဒေါ်လာ MySQLI-> Insert_id ကို အသုံးပြုလေ့ရှိသည်။ သို့သော် $ insert_id ကိုယ်တိုင်က SQL injection ပြ problems နာများကိုဖြစ်ပေါ်စေသော်လည်းအချက်အလက်ထည့်သွင်းခြင်းလုပ်ငန်းစဉ်တစ်လျှောက်လုံးတွင် SQL ဆေးထိုးခြင်းကိုကာကွယ်ရန်အလွန်အရေးကြီးသည်။
MySQLI :: $ ထည့်သွင်းထားသောတိုက်ခိုက်မှုများ မှကာကွယ်ရန်အတွက်သွင်းသွင်းခွဲစိတ်မှု၏လုံခြုံမှုကိုဤဆောင်းပါးသည်ဤဆောင်းပါးသည် SQL ဆေးထိုးခြင်းတိုက်ခိုက်မှုများမှကာကွယ်ရန်မည်သို့သေချာစေရမည်ကိုအာရုံစိုက်ပါလိမ့်မည်။
MySQLI :: $ insert_id သည် MySQLI Oblice ၏ attribute တစ်ခုဖြစ်ပြီးလတ်တလော Insert စစ်ဆင်ရေးမှထုတ်လုပ်သော autoincrement အဓိက key ID ကိုပြန်ပေးသည့် MySQLI အရာဝတ်ထု၏ attribute တစ်ခုဖြစ်သည်။ ဥပမာအားဖြင့်:
<?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");
$sql = "INSERT INTO users (username, email) VALUES ('alice', '[email protected]')";
$mysqli->query($sql);
echo "ရုံဒေတာထည့်သွင်းIDဟုတ်ကဲ့:" . $mysqli->insert_id;
?>
အထက်ပါဥပမာတွင် insert_id သည် ထည့်သွင်းထားသောအချက်အလက်များ၏ ID ကိုပြန်ပို့သည်။
INSERT_ID သည်ဒေတာဘေ့စ်ကထုတ်လုပ်သောကိန်းဂဏန်းတစ်ခုဖြစ်ပြီးလုံခြုံစိတ်ချရပြီး SQL Injection ၏အန္တရာယ်မရှိပါ။ သင်အမှန်တကယ်ကာကွယ်ရန်လိုအပ်သည့်အရာမှာထည့်သွင်းစဉ်အတွင်းအသုံးပြုသူအချက်အလက်များဖြစ်သည်။
SQL Injection ကိုများသောအားဖြင့်အသုံးပြုသူထည့်သွင်းမှုအားဖြင့် SQL ထုတ်ပြန်ချက်များကိုတိုက်ရိုက်ခွဲထားပြီး, ဥပမာအားဖြင့်:
<?php
$username = $_GET['username']; // အသုံးပြုသူထည့်သွင်းမှုမှ
$sql = "INSERT INTO users (username) VALUES ('$username')";
$mysqli->query($sql);
?>
အသုံးပြုသူ alice ဝင်လျှင်); Drop table အသုံးပြုသူများ, - ၎င်းသည်ဒေတာဘေ့စ်စားပွဲ၏ဖျက်ခြင်းကဲ့သို့သောကြီးမားသောအကျိုးဆက်များကိုဖြစ်ပေါ်စေလိမ့်မည်။
ဤသည်မှာ SQL Injection ကိုကာကွယ်ရန်အသင့်ဆုံးနည်းလမ်းဖြစ်သည်။ MySQLI သည် SQL ထုတ်ပြန်ချက်များနှင့်အချက်အလက်များကိုသီးခြားစီဖြတ်ကျော်နိုင်သည့်ကြိုတင်သတ်မှတ်ထားသောဖော်ပြချက်များကိုထောက်ခံသည်။
ဥပမာ -
<?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");
// Preprocessing ထုတ်ပြန်ချက်များကိုပြင်ဆင်ပါ
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
// parameters တွေကိုချည်ထား
$username = $_POST['username'];
$email = $_POST['email'];
$stmt->bind_param("ss", $username, $email);
// ကရိယာတန်းဆာ
$stmt->execute();
echo "အသစ်ဖြည့်စွက်IDဟုတ်ကဲ့:" . $mysqli->insert_id;
$stmt->close();
$mysqli->close();
?>
ဒီမှာ, ? placeholder သည် placeholder တစ်ခုဖြစ်ပြီးအသုံးပြုသူထည့်သွင်းမှုကို SQL သို့တိုက်ရိုက်မအောင်မြင်ပါ။ ဒေတာဘေ့စ်အင်ဂျင်သည်၎င်းကိုသာမန်အချက်အလက်များအဖြစ်သတ်မှတ်ပြီး SQL Injection ကိုလုံးဝရှောင်ရှားလိမ့်မည်။
Prosprocessing ထုတ်ပြန်ချက်များသည်အန္တရာယ်များကိုများစွာမလျှော့ချနိုင်သော်လည်း input formats သည်ကောင်းမွန်သောလုံခြုံရေးအလေ့အကျင့်တစ်ခုဖြစ်သည်။ ဥပမာအားဖြင့်, အသုံးပြုသူအမည်များကိုအက်ခရာနံပါတ်များကိုသာသာကန့်သတ်ခြင်း, စာတိုက်ပုံးများကိုစာတိုက်ပုံးပုံစံနှင့်ကိုက်ညီရမည်။
<?php
if (!preg_match('/^[a-zA-Z0-9_]{3,20}$/', $username)) {
die("အသုံးပြုသူအမည်ပုံစံမမှန်ကန်ပါ");
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("အီးမေးလ်ပုံစံမမှန်ကန်ပါ");
}
?>
အသုံးပြုသူထည့်သွင်းမှုများကို SQL ကြေငြာချက်ကြိုးများသို့မကြည့်ပါနှင့်။ အကယ်. သင်သည်ချုပ်ရန်လိုအပ်ပါက $ MySQLI-> Real_escape_String_String () ကို သုံးရန်သေချာပါစေ။ သို့သော်ဤနည်းလမ်းသည် preprocessing ထုတ်ပြန်ချက်များကဲ့သို့လုံခြုံမှုမရှိပါ။
MySQLI :: $ insert_id သည် လုံခြုံပြီး SQL Injection ကိုမဖြစ်စေပါ။
အချက်အလက်များထည့်သွင်းသောအခါ SQL ဆေးထိုးခြင်းကိုရှောင်ရှားရန်ဖြစ်သည်။
Preprocessing ထုတ်ပြန်ချက်များကိုအသုံးပြုခြင်းသည် SQL Injection ကိုကာကွယ်ရန်အကောင်းဆုံးအလေ့အကျင့်တစ်ခုဖြစ်သည်။
ဒေတာလုံခြုံရေးကိုသေချာစေရန် input verification နှင့်ပူးပေါင်းပါ။
ဤနည်းအားဖြင့် MySQLI :: $ insert_id ကို အသုံးပြု. Self-incof id ID ကိုရရှိရန်အတွက်လုံခြုံရေးနှင့်စိတ်ပူစရာမရှိသောအခမဲ့သွင်းယူမှုကိုလည်းသေချာစေနိုင်သည်။