PHP ဖွံ့ဖြိုးတိုးတက်မှုတွင် MySQL databases များကိုလုပ်ကိုင်ရန် MySQLI extension ကိုအသုံးပြုလေ့ရှိသည်။ ဇာတ်ကောင်များသတ်မှတ်ထားသည့်အခါ၎င်းတို့တွင် condbled code (သို့) SQL ဆေးထိုးခြင်းများကိုရှောင်ရှားရန်သူတို့ကဆက်သွယ်မှုဇာတ်ကောင်ကိုရှာဖွေရန်လိုအပ်သည်ဟုလူအများကအထူးသဖြင့်ဇာတ်ကောင်များတပ်ဆင်ထားသည့် MySQLI :: Get_charset () သည် မည်သည့်အကူအညီကိုပေးနိုင်သည်ကိုမသိနိုင်ပါ။
ဤဆောင်းပါးသည် MySQLI :: Get_charet ၏အခန်းကဏ် on ကိုဆန်းစစ်ကြည့်ရှုလိမ့်မည်။
MySQLI :: Get_charset () သည် PHP MySQLI Class ရှိ Metherqlqli လူတန်းစားတွင်အသုံးပြုသောနည်းလမ်းတစ်ခုဖြစ်သည်။ ၎င်းသည်လက်ရှိချိတ်ဆက်ထားသည့်ဇာတ်ကောင်အစုံပါ 0 င်သည့်အရာ ဝတ်ထုတစ်ခုဖြစ်သော ,
ရိုးရိုးလေးပြောရလျှင်ဤနည်းလမ်းသည် developer များက လက်ရှိချိတ်ဆက်ထားသည့်အက္ခရာများကိုစစ်ဆေးရန် သို့မဟုတ်လိုအပ်ပါက၎င်းတို့ကိုချိန်ညှိ။ သတ်သတ်မှတ်မှတ် filtering ကိုချိန်ညှိနိုင်သည်။
ဝဘ်ဆိုက်ဖွံ့ဖြိုးတိုးတက်မှုတွင်စာလုံးအကြီးအပြည့်အစုံကိုစနစ်တကျကိုင်တွယ်ခြင်းမရှိပါက၎င်းသည်အဓိကပြ troubl နာနှစ်ခုကိုဖြစ်ပေါ်စေသည်။
Garbled Code : ဇာတ်ကောင်အစုံသည်ရှေ့တန်းနှင့်ဒေတာဘေ့စ်အကြားကိုက်ညီမှုမရှိပါ။
လုံခြုံရေးပြ issues နာများ - အကယ်. application သည်ဇာတ်ကောင် encoding ကိုမှန်ကန်စွာကိုင်တွယ်ခြင်းမပြုပါကတိုက်ခိုက်သူတစ် ဦး က unfuscation injection (ဥပမာ GBK Encoding) မှေးမှိန်ခြင်း
ထို့ကြောင့် developer များသည်ဇာတ်ကောင် set ကိုသတ်မှတ်ရန်သာမကဆက်သွယ်မှုတွင်မည်သည့်စာလုံးကိုအသုံးပြုနေသည်ကိုစစ်ဆေးရန်လိုအပ်သည်။ ဤသည် MySQLI :: Get_charset () သည် အသုံးဝင်သည်။
အောက်ပါ PHP နမူနာကုဒ်သည် MySQLI :: Get_charset () ကို မည်သို့စစ်ဆေးရမည်ကိုပြသသည့် PHP နမူနာကုဒ်ဖြစ်သည်။
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
// ဆက်သွယ်မှုအောင်မြင်မှုရှိမရှိစစ်ဆေးပါ
if ($mysqli->connect_error) {
die("ဆက်သွယ်မှုမအောင်မြင်ပါ: " . $mysqli->connect_error);
}
// ဆက်သွယ်မှုဇာတ်ကောင်ကို set up
$mysqli->set_charset("utf8mb4");
// လက်ရှိဇာတ်ကောင်သတ်မှတ်ချက်သတင်းအချက်အလက်ရယူပါ
$charsetInfo = $mysqli->get_charset();
echo "လက်ရှိအသုံးပြုသောဇာတ်ကောင်အစုံ: " . $charsetInfo->charset . "\n";
echo "ဇာတ်ကောင်သတ်မှတ်ချက်ဖော်ပြချက်: " . $charsetInfo->description . "\n";
echo "အများဆုံး byte အရှည်: " . $charsetInfo->max_length . "\n";
// ဇာတ်ကောင်အစုံအပေါ်အခြေခံပြီးတိကျတဲ့အပြောင်းအလဲနဲ့
if ($charsetInfo->charset !== 'utf8mb4') {
// မရရှိလျှင် utf8mb4,အပိုဆောင်း filtering သို့မဟုတ်ပြောင်းလဲခြင်းလိုအပ်နိုင်ပါသည်
echo "အသိပေး:လက်ရှိဆက်သွယ်မှုမဟုတ်ပါဘူး utf8mb4,ဖြစ်နိုင်သည် Emoji အထူးဇာတ်ကောင်သိုလှောင်မှု。\n";
}
// ဥပမာတစ်ခုပေးပါ:အက်ခရာသတ်မှတ်ချက်အရ input data ကိုလုပ်ဆောင်ပါ
$userInput = "Hello ??";
// လက်ရှိဇာတ်ကောင်အစုံမထောက်ပံ့လျှင် 4 ဇာတ်ကောင် byte(ကဲ့သို့ utf8mb4),ရုံ filter ကို filter
if ($charsetInfo->max_length < 4) {
$userInput = preg_replace('/[\xF0-\xF7][\x80-\xBF]{3}/', '', $userInput);
echo "ထွက် filtered 4 ဇာတ်ကောင် byte后的输入: " . $userInput . "\n";
}
// နမူနာစုံစမ်းမှု
$stmt = $mysqli->prepare("INSERT INTO messages (content) VALUES (?)");
$stmt->bind_param("s", $userInput);
if ($stmt->execute()) {
echo "ဒေတာသွင်းအောင်မြင်စွာ,လိပ်စာကိုကြည့်ပါ: https://m66.net/messages.php?id=" . $stmt->insert_id . "\n";
} else {
echo "မအောင်မြင်ပါ: " . $stmt->error . "\n";
}
$stmt->close();
$mysqli->close();
?>
MySQLI :: Get_charset () သည် ဇာတ်ကောင်များတပ်ဆင်ခြင်းတွင် ရှာဖွေတွေ့ရှိခြင်းနှင့်ဆုံးဖြတ်ချက်ချခြင်း ၏အခန်းကဏ် plays မှပါ 0 င်သည်။ ၎င်းသည်စာလုံးများကိုအလိုအလျောက်ပြောင်းလဲခြင်းသို့မဟုတ် filter မလုပ်နိုင်ပါ, သို့သော်ပေးထားသောသတင်းအချက်အလက်များသည် developer တရားသူကြီးဖြစ်စေနိုင်သည်။
? လက်ရှိဆက်သွယ်မှုအတွက် configured မှန်ကန်သောဇာတ်ကောင်သတ်မှတ်ထားပါသလား။
? အသုံးပြုသူ input ကိုထပ်မံစစ်ထုတ်ရန်လိုအပ်ပါသလား။
? ဒေတာသမာဓိနှင့်လုံခြုံရေးကိုသေချာစေရန်ဒေတာဘေ့စ်သို့မဟုတ်ဆက်သွယ်မှု configuration ကိုချိန်ညှိရန်လိုအပ်သည်
ဒေတာအရည်အသွေးနှင့်စနစ်လုံခြုံရေးကိုအာရုံစိုက်သော developer များအတွက်ဤနည်းလမ်းကိုကောင်းစွာအသုံးပြုခြင်းသည်သင့်အားဇာတ်ကောင်များပေါ်တွင်ထောင်ချောက်များစွာကိုရှောင်ရှားရန်ကူညီနိုင်သည်။
သက်ဆိုင်သောတက်(ဂ်)များ:
mysqli