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

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

gitbox 2025-06-19

1 ။ SSL ကိုအသုံးပြုပြီး connection ကို encrypt လုပ်ပါ

ဝေးလံခေါင်သီသောဒေတာဘေ့စ်နှင့်ချိတ်ဆက်သောအခါဒေတာဘေ့စ်ဆာဗာနှင့်လျှောက်လွှာဆာဗာသည် LAN တွင်မပါ 0 င်ပါကအချက်အလက်များကိုထုတ်လွှင့်နေစဉ်ကြားဖြတ်သို့မဟုတ်အနှောင့်အယှက်ဖြစ်စေနိုင်သည်။ ထို့ကြောင့်ဒေတာထုတ်လွှင့်မှု၏လုံခြုံရေးကိုသေချာစေရန် SSL encrypted connection များကိုအသုံးပြုရန်အထူးအကြံပြုလိုပါသည်။

အကောင်အထည်ဖော်မှုနည်းလမ်း:

 <span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">'remote_host'</span></span><span>, </span><span><span class="hljs-string">'username'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>, </span><span><span class="hljs-string">'database'</span></span><span>, </span><span><span class="hljs-number">3306</span></span><span>);

</span><span><span class="hljs-comment">// တည်ဆောက်သည်SSLဆက်</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">ssl_set</span></span><span>(</span><span><span class="hljs-literal">NULL</span></span><span>, </span><span><span class="hljs-literal">NULL</span></span><span>, </span><span><span class="hljs-string">'/path/to/client-cert.pem'</span></span><span>, </span><span><span class="hljs-string">'/path/to/client-key.pem'</span></span><span>, </span><span><span class="hljs-string">'/path/to/ca-cert.pem'</span></span><span>);
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">real_connect</span></span><span>(</span><span><span class="hljs-string">'remote_host'</span></span><span>, </span><span><span class="hljs-string">'username'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>, </span><span><span class="hljs-string">'database'</span></span><span>);
</span></span>

SSL အသိအမှတ်ပြုလက်မှတ်များကိုဖွဲ့စည်းခြင်းသည်ရှုပ်ထွေးမှုများကိုတိုးပွားစေသော်လည်း၎င်းသည်အထူးသဖြင့်ကြီးမားသောဒေတာအသွားအလာနှင့်အတူအခြေအနေများတွင်ဒေတာထုတ်လွှင့်မှု၏လုံခြုံရေးကိုများစွာတိုးတက်စေနိုင်သည်။


2 ။ ဒေတာဘေ့စ်နှင့်ချိတ်ဆက်ရန် root အကောင့်ကိုမသုံးပါနှင့်

ဒေတာဘေ့စ်၏လုံခြုံရေးအတွက်အဝေးမှတိုက်ရိုက်ချိတ်ဆက်ရန်ဒေတာဘေ့စ် root အကောင့်ကိုမသုံးပါနှင့်။ အမြစ် အကောင့်သည်ဒေတာဘေ့စ်ကိုအမြင့်ဆုံးအာဏာပိုင်ဖြစ်သည်။ ပေါက်ကြားလိုက်တာနဲ့ဟက်ကာဟာ Database ကိုအလိုအလျောက်လည်ပတ်စေပြီးဆုံးရှုံးမှုမရှိတော့ပါဘူး။

အကောင်အထည်ဖော်မှုနည်းလမ်း:

ဒေတာဘေ့စ်သို့မဟုတ်စားပွဲတစ်ခုသာရယူခြင်းကဲ့သို့သောဒေတာဘေ့စ်အသုံးပြုသူတစ် ဦး ကိုဖန်တီးပါ။ အသုံးပြုသူတစ် ဦး ကိုဖန်တီးပြီးခွင့်ပြုချက်များကိုဖန်တီးခြင်းဥပမာဖြစ်သည်။

 <span><span><span class="hljs-keyword">CREATE</span></span><span> </span><span><span class="hljs-keyword">USER</span></span><span> </span><span><span class="hljs-string">'web_user'</span></span><span>@</span><span><span class="hljs-string">'%'</span></span><span> IDENTIFIED </span><span><span class="hljs-keyword">BY</span></span><span> </span><span><span class="hljs-string">'secure_password'</span></span><span>;
</span><span><span class="hljs-keyword">GRANT</span></span><span> </span><span><span class="hljs-keyword">SELECT</span></span><span>, </span><span><span class="hljs-keyword">INSERT</span></span><span>, </span><span><span class="hljs-keyword">UPDATE</span></span><span> </span><span><span class="hljs-keyword">ON</span></span><span> your_database.</span><span><span class="hljs-operator">*</span></span><span> </span><span><span class="hljs-keyword">TO</span></span><span> </span><span><span class="hljs-string">'web_user'</span></span><span>@</span><span><span class="hljs-string">'%'</span></span><span>;
</span></span>

ထို့နောက်ဒေတာဘေ့စ်ဆက်သွယ်မှုအတွက် PHP တွင်အသုံးပြုသူကိုသုံးပါ။

 <span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">'remote_host'</span></span><span>, </span><span><span class="hljs-string">'web_user'</span></span><span>, </span><span><span class="hljs-string">'secure_password'</span></span><span>, </span><span><span class="hljs-string">'database'</span></span><span>);
</span></span>

3 ။ ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များကိုသုံးပါ

ထုတ်ပြန်ချက်များကိုပြင်ဆင်ခြင်းသည် SQL Injection တိုက်ခိုက်မှုများကိုထိထိရောက်ရောက်တားဆီးနိုင်ပြီးဒေတာဘေ့စ်မေးမြန်းချက်များ၏စွမ်းဆောင်ရည်ကိုတိုးတက်စေနိုင်သည်။ MySQL သည် ပြင်ဆင်မှုထုတ်ပြန်ချက်များအကောင်အထည်ဖော်ရန်အစွမ်းထက်သောပံ့ပိုးမှုပေးသည်။

ဥပမာ -

 <span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE email = ?"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"s"</span></span><span>, </span><span><span class="hljs-variable">$email</span></span><span>); </span><span><span class="hljs-comment">// "s"string ကိုအမျိုးအစားကိုကိုယ်စားပြုတယ်</span></span><span>
</span><span><span class="hljs-variable">$email</span></span><span> = </span><span><span class="hljs-string">'[email protected]'</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">get_result</span></span><span>();
</span></span>

ပြင်ဆင်မှုကြေငြာချက်ကို အသုံးပြု. အသုံးပြုသူမှအကြောင်းအရာထည့်သွင်းမှုသည် SQL ကြေညာချက်သို့တိုက်ရိုက်မအောင်မြင်ပါ။


4 ။ ဒေတာဘေ့စ် connection pool ကိုအသုံးပြုခြင်း

မြင့်မားသောတစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းတွင်ဒေတာဘေ့စ်ဆက်သွယ်မှုများကိုမကြာခဏဖန်တီးခြင်းနှင့်ဖျက်ဆီးခြင်းသည်လျှောက်လွှာ၏စွမ်းဆောင်ရည်ကိုများစွာအကျိုးသက်ရောက်နိုင်သည်။ ဒေတာဘေ့စ်ဆက်သွယ်မှုများ၏ထိရောက်မှုကိုတိုးတက်စေရန်ဒေတာဘေ့စ် connection pool ကိုအသုံးပြုရန်အကြံပြုပါသည်။ MySQLI သည် connection pooling formation ကိုကိုယ်တိုင်မထောက်ပံ့သော်လည်း PHP-FPM နှင့် MySQLND drivers ကဲ့သို့သောကိရိယာများသို့မဟုတ်မူဘောင်အချို့၏အကူအညီဖြင့်သို့မဟုတ်ပြင်ပဆက်သွယ်ရေးခရိုင်ရေကူးကန်များအသုံးပြုခြင်းကိုပြုလုပ်နိုင်သည်။

Connection Pool မှတဆင့် applications များသည်လက်ရှိဆက်သွယ်မှုများကိုပြန်လည်သုံးသပ်ခြင်း, မကြာခဏဆက်သွယ်မှုတည်ထောင်ခြင်း၏ overhead ကိုလျှော့ချနိုင်သည်။


5 ။ Firewall နှင့် IP Whitelist

ဒေတာဘေ့စ်၏လုံခြုံရေးကိုတိုးမြှင့်စေရန် Database server တွင်သတ်သတ်မှတ်မှတ် IP မှသာဆက်သွယ်မှုကိုခွင့်ပြုရန် Database server တွင် configure လုပ်နိုင်သည်။ အထူးသဖြင့်ထုတ်လုပ်မှုပတ် 0 န်းကျင်များတွင် IP လိပ်စာကိုဒေတာဘေ့စ်နှင့်ချိတ်ဆက်ရန်ခွင့်မပြုပါနှင့်။

configuration နည်းလမ်း:

MySQL တွင် IP access ကိုအောက်ပါ SQL command မှတဆင့်ကန့်သတ်နိုင်သည်။

 <span><span><span class="hljs-keyword">GRANT</span></span><span> </span><span><span class="hljs-keyword">ALL</span></span><span> PRIVILEGES </span><span><span class="hljs-keyword">ON</span></span><span> your_database.</span><span><span class="hljs-operator">*</span></span><span> </span><span><span class="hljs-keyword">TO</span></span><span> </span><span><span class="hljs-string">'web_user'</span></span><span>@</span><span><span class="hljs-string">'192.168.1.100'</span></span><span>;
</span></span>

Web_USER သည် သတ်မှတ်ထားသော IP address မှသာဆက်သွယ်ပါ။


6 ။ သင့်လျော်သောဆက်သွယ်မှုအချိန်ကုန်ကိုသတ်မှတ်ပါ

မတည်ငြိမ်သောသို့မဟုတ်မတည်မငြိမ်ကွန်ယက်ပတ်ဝန်းကျင်တွင်ဒေတာဘေ့စ်နှင့်ချိတ်ဆက်သောအခါသင်အချိန်ကုန်ပြ issues နာများကိုသင်တွေ့ကြုံခံစားနိုင်သည်။ ကျိုးကြောင်းဆီလျော်သောအချိန်ကုန်မသတ်မှတ်ထားပါက၎င်းသည်ဆက်သွယ်မှုတောင်းဆိုမှုကိုလျှောက်လွှာ၏တုန့်ပြန်မှုအချိန်ကိုထိခိုက်စေနိုင်သည်။

MySQL သည် connection timeout ကိုစနစ်တကျရှိနေခြင်းကိုအချိန်ကြာမြင့်စွာသိမ်းပိုက်ထားသောတုံ့ပြန်မှုမရှိသောဆက်သွယ်မှုများကိုရှောင်ရှားရန် seting timeout ကိုသတ်မှတ်ခြင်းကိုထောက်ခံသည်။

 <span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>();
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">options</span></span><span>(MYSQLI_OPT_CONNECT_TIMEOUT, </span><span><span class="hljs-number">5</span></span><span>);  </span><span><span class="hljs-comment">// တည်ဆောက်သည်ဆက်超时为5စက်ဏန့်</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">real_connect</span></span><span>(</span><span><span class="hljs-string">'remote_host'</span></span><span>, </span><span><span class="hljs-string">'username'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>, </span><span><span class="hljs-string">'database'</span></span><span>);
</span></span>

7 ။ ဝယ်လိုအားအပေါ်ရှာဖွေရေးလယ်ကွင်း

အဝေးမှဒေတာဘေ့စ်နှင့်အပြန်အလှန်ဆက်သွယ်သည့်အခါလယ်ကွင်းများအားလုံးကိုရှာဖွေရန် Select * ကို မသုံးပါနှင့်။ ဒေသခံဒေတာဘေ့စ်တစ်ခုနှင့်ချိတ်ဆက်သည့်တိုင်မလိုအပ်သောအကွက်များကိုရှာဖွေခြင်းသည် bandwidth ကိုရှာဖွေခြင်းနှင့်ဝေးလံခေါင်သီသောဒေတာဘေ့စ်၏ကွန်ယက် latency သည်ပိုမိုထင်ရှားသည်။ ထို့ကြောင့်မလိုအပ်သောအချက်အလက်လွှဲပြောင်းမှုကိုလျှော့ချရန်လိုအပ်သောကွက်လပ်များကိုရှင်းလင်းရန်အကြံပြုသည်။

ဥပမာ -

 <span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, name FROM users WHERE status = 'active'"</span></span><span>);
</span></span>

8 ။ Database Load Balancing နှင့်ဖတ်ရန် - ရေးသားခြင်း

သင်၏လျှောက်လွှာသည်အချက်အလက်အမြောက်အများကိုကိုင်တွယ်ရန်လိုအပ်ပါကဒေတာဘေ့စ်တင်ခြင်းကိုချိန်ညှိခြင်းနှင့်စာဖတ်ခြင်း - ရေးခြင်းခွဲခြာခြင်းနည်းစနစ်များကိုအသုံးပြုခြင်းကိုစဉ်းစားပါ။ ဖတ်ခြင်းစစ်ဆင်ရေးများကိုရေးသားခြင်းလုပ်ငန်းများကိုခွဲထုတ်ခြင်းအားဖြင့်၎င်းတို့အားကွဲပြားခြားနားသောဒေတာဘေ့စ်ဖြစ်ရပ်များကိုသတ်မှတ်ခြင်းအားဖြင့်စနစ်၏စွမ်းဆောင်ရည်နှင့်ရရှိနိုင်မှုကိုထိရောက်စွာတိုးတက်အောင်လုပ်နိုင်သည်။

ဥပမာအားဖြင့်မာစတာဒေတာဘေ့စ်ကိုရေးရန်အတွက်အသုံးပြုသည်။ ကျွန်ဒေတာဘေ့စ်ကိုဖတ်ရန်အတွက်အသုံးပြုသည်။ ကွဲပြားခြားနားသောစစ်ဆင်ရေးအရဆက်သွယ်မှုအတွက် PHP သည်ဆက်သွယ်မှုအတွက်သက်ဆိုင်ရာဒေတာဘေ့စ်များကိုရွေးချယ်နိုင်သည်။

  • သက်ဆိုင်သောတက်(ဂ်)များ:

    mysqli