လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Serialize နှင့်ဒေတာဘေ့စသိုလှောင်မှု - ဒေတာအဂတိလိုက်စားမှုကိုမည်သို့ရှောင်ရှားရမည်နည်း။

Serialize နှင့်ဒေတာဘေ့စသိုလှောင်မှု - ဒေတာအဂတိလိုက်စားမှုကိုမည်သို့ရှောင်ရှားရမည်နည်း။

gitbox 2025-05-27

PHP တွင် Serialize function သည် PHP variable များကို string များကို strings များအဖြစ်ပြောင်းလဲရန်အသုံးများသောနည်းလမ်းဖြစ်သည်။ သိုလှောင်မှုသို့မဟုတ်ပြန်လည်ရယူခြင်းတွင်သိုလှောင်ခြင်း, ဒေတာဘေ့စ်ထဲသို့အချက်အလက်များကိုစနစ်တကျသိုလှောင်ရန်နှင့်ဖြစ်နိုင်သောအဂတိလိုက်စားမှုဆိုင်ရာပြ issues နာများကိုရှောင်ရှားရန် PHP ၏ Serialize function ကိုမည်သို့အသုံးပြုရမည်ကိုဤဆောင်းပါးကရှင်းပြပါမည်။

1 ။ Serialize function ကဘာလဲ။

Serialize function သည် PHP variable များကို string format များကိုသိမ်းဆည်းထားပြီးလွှဲပြောင်းနိုင်သည်။ Array တစ်ခုသို့မဟုတ်အရာဝတ်ထုတစ်ခုကိုဒေတာဘေ့စ်တစ်ခုအဖြစ်သိုလှောင်ရန်လိုအပ်သည့်အခါ PHP ၏ Serialize function သည်အလွန်အသုံးဝင်သည်။ သင်သည်ဤ string ကိုဒေတာဗေ့စ်ရှိကွက်လပ်တစ်ခုတွင်သိမ်းဆည်းပြီးနောက်ပိုင်းတွင်မူလခင်းကျင်းခြင်းသို့မဟုတ်အရာဝတ်ထုသို့ပြန်ယူရန် unserialize function ကိုသုံးနိုင်သည်။

ဥပမာအားဖြင့်, သင့်တွင်ခင်းကျင်းမှုတစ်ခုရှိသည်ဆိုပါစို့။

 $data = array("name" => "Alice", "age" => 30, "city" => "New York");

၎င်းကို string တစ်ခုသို့ပြောင်းရန် Serialize function ကိုသုံးပါ။

 $serializedData = serialize($data);
echo $serializedData;

output သည် string ကိုကိုယ်စားပြုမှုတစ်ခုဖြစ်လိမ့်မည်။

 a:3:{s:4:"name";s:5:"Alice";s:3:"age";i:30;s:4:"city";s:8:"New York";}

2

အချက်အလက်များကို string တစ်ခုထဲသို့ပြောင်းလဲရန် Serialize function ကိုအသုံးပြုပြီးနောက်ဒေတာဘေ့စ်တွင်သိမ်းဆည်းထားနိုင်သည်။ အသုံးပြုသူကြိုက်နှစ်သက်မှုများကိုသိမ်းဆည်းရန် ဦး စားပေး သည့်နေရာများတွင်အသုံးပြုသော အသုံးပြုသူများကို အသုံးပြုသောရိုးရှင်းသောဒေတာဘေ့စ်စားပွဲတစ်ခုရှိသည်ဆိုပါစို့။ array အချက်အလက်များကိုကြိုးတပ်များသို့ပြောင်းရန် Serialize function ကို သုံး. ဒေတာဘေ့စ်သို့ထည့်သွင်းရန်သင်အသုံးပြုနိုင်သည်။

 // သငျသညျဒေတာဘေ့စနှင့်ချိတ်ဆက်ရှိသည်ဆိုပါစို့
$data = array("theme" => "dark", "language" => "en");
$serializedData = serialize($data);

// ဒေတာဘေ့စ်စုံစမ်းမှုကို အသုံးပြု. ဒေတာထည့်ပါ
$sql = "INSERT INTO users (preferences) VALUES (:preferences)";
$stmt = $pdo->prepare($sql);
$stmt->execute(['preferences' => $serializedData]);

ဤဥပမာတွင်အသုံးပြုသူ၏အကြိုက်များကို database ၏ preferences freating field တွင် serialized string တစ်ခုအဖြစ်သိမ်းဆည်းထားသည်။

3 ။ ဒေတာဘေ့စ်မှဒေတာများကိုပြန်လည်ရယူရန်နှင့် daterialize လုပ်နည်း။

ဒေတာဘေ့စ်မှသိမ်းဆည်းထားသော serialized data အချက်အလက်များကိုသင်ပြန်လည်ရယူသောအခါမူရင်း PHP ဒေတာအမျိုးအစားသို့ပြန်လည်ထူထောင်ရန် unserialize function ကိုသုံးပါ။ သင်အသုံးပြုသူ၏အကြိုက်များကိုရယူပြီး၎င်းကိုခင်းကျင်းရန်ထည့်သွင်းစဉ်းစားပါ။

 // ဒေတာဘေ့စ်မှ Serialized ကြိုးများကိုပြန်လည်ရယူပါ
$sql = "SELECT preferences FROM users WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(['id' => 1]);
$row = $stmt->fetch();

// အသုံးပြု unserialize ဒေတာကို restore
$preferences = unserialize($row['preferences']);
print_r($preferences);

ဤအချိန်တွင် $ Preferences သည် Activityive ခင်းကျင်းဖြစ်လိမ့်မည်။

 Array
(
    [theme] => dark
    [language] => en
)

4 ။ ဒေတာအဂတိလိုက်စားမှုကိုရှောင်ရှားရန်ကြိုတင်ကာကွယ်မှုများ

Serialize နှင့် unserialize functions များကိုအသုံးပြုသောအခါအထူးသဖြင့်ဒေတာဘေ့စ်မှအချက်အလက်များထုတ်ယူသည့်အခါအလားအလာရှိသောအန္တရာယ်များကိုအထူးဂရုပြုရန်လိုအပ်သည်။

က။ ဒေတာဘေ့စ်ဇာတ်ကောင် set ပြ problem နာ

ဒေ တာ ဘေ့စ်များနှင့်စားပွဲများ၏ဇာတ်ကောင်များကိုမှန်ကန်စွာသတ်မှတ်ထားကြောင်းသေချာအောင်လုပ်ပါ။ ဒီလိုမှမဟုတ်ရင် serialized string ကိုကိုက်ညီတဲ့ဇာတ်ကောင် encoding ကြောင့်ဒေတာအကျင့်ပျက်ခြစားမှုကိုဖြစ်ပေါ်စေနိုင်သည်။

ခ။ SQL ဆေးထိုးတိုက်ခိုက်မှုတားဆီး

ဒေတာဘေ့စ်လုပ်ငန်းများလုပ်ဆောင်သောအခါအသုံးပြုသူမှထည့်သွင်းထားသောအချက်အလက်များကို SQL Query များသို့တိုက်ရိုက်ထည့်သွင်းခြင်းမပြုပါနှင့်။ SQL Injection တိုက်ခိုက်မှုများကိုရှောင်ရှားရန်ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များကိုအမြဲတမ်းအသုံးပြုပါ။

ဂ။ deserialization မမှန်ကန်သောအခြေအနေကိုကိုင်တွယ်ပါ

unserialize function ကိုအသုံးပြုသောအခါသင်သည် deserialization ပျက်ကွက်ခြင်းကိုသင်ကြုံတွေ့ရနိုင်သည်။ ဤအချိန်တွင် @ @ operator ကို သုံး. အမှားအယွင်းများကိုဖိနှိပ်ရန်နှင့် deserialization ရလဒ်သည် မှားယွင်းနေ သည်။

 $preferences = @unserialize($row['preferences']);
if ($preferences === false) {
    // deserialization ပျက်ကွက်,အမှားများကိုကိုင်တွယ်
    echo "Failed to unserialize data.";
}

5 ။ JSOR_CenDode ကို အခြားရွေးချယ်စရာတစ်ခုအဖြစ်အသုံးပြုပါ

Serialize function သည်အလွန်အစွမ်းထက်သော်လည်းအချို့ကိစ္စများတွင် JSONS_CETDED နှင့် JSONS_Decode functions များကိုလည်းစဉ်းစားနိုင်သည်။ JSON format သည်များသောအားဖြင့်အခြားဘာသာစကားများနှင့်ပလက်ဖောင်းများနှင့်အပြန်အလှန်ဆက်သွယ်ရန်ပိုမိုလွယ်ကူသည်။

 // အသုံးပြု json_encode နှင့် json_decode
$data = array("theme" => "dark", "language" => "en");
$jsonData = json_encode($data);

// ဒေတာဘေ့စ်ကိုသိမ်းထားပါ
$sql = "INSERT INTO users (preferences) VALUES (:preferences)";
$stmt = $pdo->prepare($sql);
$stmt->execute(['preferences' => $jsonData]);

// ဒေတာဘေ့စ်မှပြန်လည်ရယူခြင်းနှင့်ပြန်လည်ရယူခြင်း
$sql = "SELECT preferences FROM users WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(['id' => 1]);
$row = $stmt->fetch();

$preferences = json_decode($row['preferences'], true);
print_r($preferences);

JSON သည်အထူးသဖြင့်ပြင်ပစနစ်များနှင့်ဒေတာဖလှယ်မှုလိုအပ်သည့်အခါ သဘောတတ်ခြင်း ထက်ပိုမိုကျယ်ပြန့်စွာပြုလုပ်နိုင်သည်။

အကျဉ်းချုပ်

PHP ၏ Serialize function ကိုအသုံးပြုခြင်းသည်ရှုပ်ထွေးသောအချက်အလက်များကိုဒေတာဘေ့စ်တစ်ခုအဖြစ်အလွယ်တကူသိမ်းဆည်းနိုင်သည်။ SQL Injection ကိုကာကွယ်ရန်နှင့် deserialization အမှားများကိုကိုင်တွယ်ရန် Proprocessing ထုတ်ပြန်ချက်များကိုမှန်ကန်စွာဖော်ပြပါ။ အထူးသဖြင့်အခြားဘာသာစကားများသို့မဟုတ်ပလက်ဖောင်းများနှင့်အပြန်အလှန်ဆက်သွယ်ခြင်းအတွက် JSON_enCode နှင့် JSON_Decode ကို အခြားနည်းလမ်းများအဖြစ်အသုံးပြုသည်။