အကယ္ရွ္သင္ဟာ PHP အသံုးျပဳတယ္ဆိုရင္ MySql ကိုေတာ္ေတာ္ေလးသံုးရမွာပါ
ဒီ ariticle မွာ Mysql ကိုအားေပးထားတယ္ေနာ္ php ပိုင္တယ္ဆိုျပီး အကုန္လံုး php နဲ႔ေရးဖို႔စိတ္ကူးထားရင္ေတာ႔ ဖတ္ၾကည္႔ပါ
PHP ကေတာ္ေတာ္လည္းလြယ္ကူပါတယ္(ကၽြန္ေတာ္ကအခုမွ စမ္းတုန္းဟီး)
ဒါေၾကာင္႔ Developer အမ်ားစုဟာ function က်တဲ႔ coding ေတြကို အခ်ိန္အနည္းငယ္အတြင္းမွာေရးႏိုင္ပါတယ္။
ဒါေပမယ္႔လည္းပဲ႔ ေသေသခ်ာခ်ာတည္ေဆာက္ေရးသားရမွာပါ
စိတ္ခ်ရတဲ႔ database ကိုတည္ေဆာက္ဖို႔အတြက္ အခ်ိန္ယူရမွာပါ ျပီးေတာ႔ ကၽြမ္းက်င္မွဳလည္းလိိုအပ္ပါတယ္
ဒါေၾကာင္႔ကၽြန္ေတာ္က php developer ေတြမွားတတ္တဲ႔ sql အမွား ဆယ္ခ်က္ကိုေဖာ္ျပေပးမွာျဖစ္ပါမယ္
အခ်က္ (၁) InnoDB ထက္ MyISAM ကိုပိုျပီး သံုးမ်ားျခင္း
MySQL မွာ database engines နံပါတ္ေတြရွိပါတယ္။
ဒါေပမယ္႔ သင္႔ကေတာ႔ MyISAM နဲ႕ InnoDB ကိုပိုျပီးေတာ႔ အသံုးမ်ားမွာပါ။
MyISAM ကေတာ႔ ပံုမွန္(default) အသံုးျပဳတာပါ။
ဒါေပမယ္႔ သင္က ပံုမွန္ creating လုပ္မယ္ဆိုရင္ သို႔မဟုတ္ database ေတြကိုစမ္းသပ္အသံုးျပဳမယ္ဆုိရင္
(MyISAM)ဒါကိုအသံုးျပဳျခင္းဟာ မွားယြင္းတဲ႔ ေရႊးခ်ယ္မွုပါပဲ႔။ဘာေၾကာင္႔လဲဆိုေတာ႔
MyISAM က foreign key constraints or transactions ကို support မလုပ္ပါဘူး
ဒါက data တည္ေဆာက္မွုခိုင္ျမဲ႔ဖို႔အတြက္ မရွိမျဖစ္လိုအပ္ပါတယ္
ထပ္ျပီးေျပာရမယ္ဆိုရင္ table တစ္ခုလံုး lock ျဖစ္သြားခဲ႔ရင္ေတာင္ဘယ္အခ်ိန္မဆို record လုုပ္ထားတဲ႔ဟာကို ကၽြန္ေတာ္တို႔ insert or update လုပ္လို႔ရပါတယ္။
ဒီလိုအသံုးျပဳျခင္းေၾကာင္႔ လုပ္ေဆာင္ခ်က္ေတြ ပ်က္စီးသြားေစနိုင္ပါတယ္
ဒါေၾကာင္႔ အေျဖကေတာ႔ လြယ္ပါတယ္ InnoDB ကိုသာသံုးပါ ဟီး
အခ်က္(၂) PHP ၏ mysql function ကိုအသံုးျပဳျခင္း
PHP က MySQL libriary function ကို provide လုပ္ပါတယ္
Application အမ်ားၾကီးက ေအာက္ကဟာေတြကိုမွီခိုေနရပါတယ္
mysql_connect,mysql_query,mysql_fetch_assoc,mysql_select_db, ...စသည္ျဖင္႔ေပါ႔ဗ်ာ
အကယ္ရွ္ သင္က MySQL version 4.1.3 ဒါမဟုတ္ ေနာက္ပိုင္း version ကိုအသံုးျပဳတယ္ဆိုရင္
သင္က mysql extension ျဖစ္တဲ႔ mysqli ကိုသံုးရမွာပါ ဒါကိုအသံုးျပဳတဲ႔အတြက္အက်ိဳးေက်းဇူးေတြအမ်ားၾကီးရွိပါတယ္
ပံုမွန္အားျဖင္႔ဗ်ာ
object-oriented interface
prepared statements(ဒါက sql-injection attack ကိုကာကြယ္ေပးပါတယ္ ျပီးေတာ႔ လုပ္ေဆာင္ခ်က္ကိုလည္းပိုျမန္ေစပါတယ္)
multiple statements and transaction support
တစ္နည္းအားျဖင္႔ သင္က multiple databases ကို support လုပ္ခ်င္တယ္ဆိုရင္ PDO လို႔စဥ္းစားသင္႔ပါတယ္။
PDO အေၾကာင္းသိခ်င္ရင္
http://uk2.php.net/m...en/book.pdo.php
အခ်က္(၃) User input ကိုမရွင္းလင္းထားျခင္း
User Input ကုိဘယ္ေတာ႔မွမယံုပါနဲ႔
Server Side PHP ကိုအသံုးျပဳျပီး ဘယ္ String ကိုမဆို Validate လုပ္လို႔ရပါတယ္
ဒါေၾကာင္႔ javascript ကို အဲဒီအတြက္အားမကိုးပါနဲ႔
ဒီလိုမ်ိဳး ေအာက္ကကုတ္ကေန SQL injection attack လုပ္လို႔ရနိုင္ပါတယ္
$username=$_POST['name'];
$password =$_POST['password'];
$sql="SELECT userid FROM usertbl WHERE username='$username' AND password='$password';";
ဒါက username field ထဲမွာ "admin'; --" ထည္႔သြင္းျပီး crack လုပ္လို႔ရပါတယ္
မယံုဘူးဆိုရင္ လက္ေတြျပမယ္ဗ်ာ
Google.com ကိုသြားဗ်ာ ျပီးေတာ႔ inurl:admin.asp လိုရိုက္ထည္႔ ျပီေတာ႔ sql inject ေလးထည္႔ၾကည္႔
အေပၚက string က user က input ထည္႔လိုက္တဲ႔အခါ ဒီလိုေလးနဲ႔သြားတူသြားပါတယ္
SELECT userid FROM usertbl WHERE username='admin';
အဲလိုေလးသာေရးထားတဲ႔ website ဆိုရင္ တားလို မရိုးသားတဲ႔ cyberoot က admin အျဖစ္နဲ႔ log in ၀င္နိုင္မွာေပါ႔
password ေတာင္သိစရာမလိုဘူး ဟီး ဘာလိို႔လဲဆိုေတာ႔ လုပ္ေဆာင္ခ်က္တူတူပဲ႔
အခ်က္(၄) ျဖစ္နုိင္ရင္ UTF-8 မသံုးပါနဲ႔
ကၽြန္ေတာ္ေျပာခ်င္တာကေတာ႔ ပံုမွန္ english ကိုပဲ႔သံုးမယ္ဆိုရင္ utf-8 ကိုမသံုးေစခ်င္ပါဘူး
ျမန္မာစာေရးမယ္ဒါမွမဟုတ္အျခား language ေတြေရးမယ္ဆိုေတာ႔မသံုးမျဖစ္သံုးရမွာပဲ႔
UTF-8 က international language ျပသနာကိုေျဖရွင္းေပးေသာ္လည္းပဲ႔ PHP version 6 မတိုင္ခင္ထိ ေကာင္ေကာင္း ေထာက္ပံမွဳမေပးနိုင္ေသးလို႔ပါပဲ႔
MySQL character sets ကေန UTF-8 setting အတြက္နည္းနည္းေလးအတားဆီးျဖစ္ေနပါတယ္ေသးတယ္
အခ်က္(၅) SQL ထက္ PHP ကို မ်က္နွာသာေပးျခင္း
သင္က Sql အသစ္ကိုသံုးတဲ႔အခါ သင္သိတဲ႔ language ထဲမွာ ျပသနာေတြကို ေျဖရွင္းဖို႔ေခၚလာတတ္ပါတယ္
ဒါက မလိုအပ္ပဲ႔နဲ႔ code ေတြကို ေနွးေကြးေစပါတယ္
ဥပမာ MySQL ၏ native ျဖစ္တဲ႔ AVG() function ကိုအသံုးျပဳျခင္းထက္
သင္က record-set ထဲမွာရွိတဲ႔တန္ဖိုးအားလံုးကို ေပါင္းျခင္းျဖင္႔ ပ်မ္းမွ် တြက္ခ်က္ဖို႔ PHP Code ကိုသံုးတဲ႔အတြက္ေၾကာင္႔ပါပဲ႔
ဒါေၾကာင္႔ PHP loops ထဲမွာရွိတဲ႔ SQL queries ေတြကို ဂရုစိုက္မိပါေစသာမန္ဆိုရင္
result ကို loop နဲ႔ပတ္တာထက္ query ကို သံုးျပီး run တာကပိုျပီးထိေရာက္မွုရွိပါတယ္
ပံုုမွန္ေျပာရရင္ေတာ႔ data ေတြ analyzing လုပ္တဲ႔အခါ သင္႔ရဲ႕ database power ကိုပိုုျပီးလုုပ္ေဆာင္မွဳအားေကာင္းေအာင္အက်ိုးရွိရွိအသံုုးခ်ျခင္းျဖစ္ပါတယ္ဂ်ာ။
အခ်က္(၆) သင္႔ရဲ႕ query ေတြအဆင္မေျပဘူးဆိုရင္
PHP လုပ္ေဆာင္ခ်က္ ျပသနာရဲ႕ 99 % က database ေၾကာင္႔ျဖစ္တာပါ
ဒါကို PHP သမားေတြေကာင္းေကာင္သိပါတယ္ ဟုတ္တယ္မဟုတ္လား ကၽြန္ေတာ္ေတာ႔ နည္းနည္းပဲ႔သိေသးတယ္
ဟုတ္တယ္ဗ် ကၽြန္ေတာ္ php ေရးထဲ႔အခါတိုင္း error တက္ျပီးဆိုရင္ class ထဲ႔က database query ေတြမွားတာပဲ႔
ဥပမာဗ်ာ INSER INTO တို႔ UPDAE SET တို႔ခဏခဏမွားတတ္ပါတယ္ (တစ္ခါတစ္ေလ ေရးသားနည္းတူတာေတာင္မွအလုပ္မလုပ္ပါဘူး)
ကိုယ္ေတြ႔ေလးေပါ႔ ဒါဆိုရင္ ဘယ္လိုလုပ္မလဲ အၾကံဖန္သံုးေပါ႔ဗ်ာ
database table ထဲမွာ အရင္ ကိုယ္လုပ္ခ်င္တာလုပ္ျပီး သူေပးတဲ႔ source code ကုိျပန္ျပင္ရတယ္ (ၾကည္႔လိုက္ေတာ႔လည္းတူတူပါပဲ႔ ဟီး)
မွားယြင္းတဲ႔ sql query တစ္ေၾကာင္းေလးကေတာင္ သင္႔ Application ကို ကေသာင္းကနင္းျဖစ္ေစပါတယ္ အဲဒီအခါ သင္ေခါင္းၾကီးပါျပီ
အခ်က္(၇) Data type ကိုမွားယြင္းစြာအသံုးျပဳျခင္း
Mysql က numeric,string နဲ႔ time ဆိုတဲ႔ data types ေတြကို ရည္ညႊန္းပါတယ္
တစ္ကယ္လို႔ သင္က date ကို store လုပ္ခ်င္တယ္ဆိုရင္ date သုိ႔မဟုတ္ datetime ဆိုတဲ႔ နယ္ပယ္ထဲ႔က ဟာေတြကိုအသံုးျပဳရမွာပါ
integer or string သံုးျခင္းကေတာ႔ SQL query ကိုပိုျပီးရွပ္ေထြးေစပါတယ္
သူဟာနဲ႔သူ အဆင္ေျပေအာင္ေရႊးခ်ယ္ရမွာပါ။
ဥပမာ String ထဲ႔မွာ PHP object ကို storing လုပ္ခဲ႔ရင္ Database Management ကပိုျပီးလြယ္ကူသြားမွာပါ
ဒါေပမယ္႔ MySQL ကေန အသံုးမလိုတဲ႔ data ေတြျဖစ္လာျပီးေနာက္ပိုင္းမွာ ျပသနာေတြတက္လာေစနိုင္မွာပါ။
အခ်က္(၈) SELECT queries ထဲ႔က * ကုိအသံုးျပဳျခင္း
Table ထဲက columns ေတြအားလံုးကို return ျပန္ဖို႔ဆိုရင္ ဘယ္ေတာ႔မွ * query ကိုမသံုးပါနဲ႔လို႔တိုက္တြန္းပါရေစ
ဒါလိုသံုးတာက သင္ပ်င္းတာကိုျပလိုက္တာပါပဲ႔ ဟီး မွတ္ျပီလား ၾကံဳတုန္းေလး ေဟာက္ထားမွ
သင္လိုခ်င္တဲ႔ data ေလာက္ပဲ႔ extract လုပ္သင္႔ပါတယ္
တစ္ကယ္လို႔ သင္က field အားလံုးကိုလိုခ်င္တယ္ဆိုရင္ေတာင္ သင္႔ရဲ႕ tables က လံုး၀ကို ေျပာင္းလဲသြားပါလိမ္႔မယ္။
အခ်က္(၉) under - or over- indexing
ပံုမွန္ စည္းမ်ည္းအရဆိုရင္ , SELECT query ရဲ႕ WHERE clause ထဲက ဘယ္ column name မဆို indexes ေတြကိုအသံုးျပဳသင္႔ပါတယ္
ဥပမာ ကၽြန္ေတာ္တို႔မွာ numeric id နဲ႔ email address ဆိုတဲ႔ usertable ရွိတယ္ဆုိပါစို႔
Log in လုပ္ေနစဥ္အတြင္းမွာ Mysql က email အတြက္ မွန္ကန္တဲ႔ id ကို ရွာေပးမွာပါ
index နဲ႔ဆိုရင္ေတာ႔ Mysql က search algorithm သံုးျပီး email နဲ႔ပတ္သက္တဲ႔အားလံုးနီးပါးကိုခ်က္ခ်င္း ျမန္ျမန္္ရွာေပးနိုင္ပါတယ္။
Index မပါဘူးဆိုရင္ေတာ႔,Mysql က address ကုိေတြတဲ႔ အထိ sequence ထဲ႕က record အားလံုးကိုစစ္ေဆးမွာပါ
ဒါေၾကာင္႔ performance ကို ထိခိုက္နိုင္ပါတယ္ ဒါေၾကာင္႔ လိုအပ္တဲ႔အခ်ိန္မွာပဲ႔ index ေတြကို ေပါင္းထည္႔ေရးသားပါ
အဆင္႔(၁၀) back up လုပ္ဖို႔ ေမ႔ေလ်ာ႔ျခင္း
ဒီလိုလုပ္တာရွားပါလိမ႔္မယ္၊ ဒါေပမယ္႔ hard disk ျပသနာျဖစ္ခဲ႔ရင္ သို Server error ေတြတက္တဲ႔အခါ မွာေပါ႔
database fail ျဖစ္နိုင္ပါတယ္
ဒါေၾကာင္႔ automated backups လုပ္ထားဖို႔လိုအပ္ပါတယ္။
အဆင္႔(၁၁) အမွားအပိုဆု - အျခား database ေတြကိုမစဥ္းစားပါနဲ႔
mysql က php developer ေတြအသံုးမ်ားဆံုး database တစ္ခုျဖစ္ပါတယ္
ဒါပဲ႔ေရြးစရာရွိလားဆိုေတာ႔ အျခားဟာေတြလည္းရွိပါတယ္
PostgreSQL and Firebird are its closest competitors တဲ႔
အဲဒီနွစ္ခုလံုးက opensource ျဖစ္ျပီးေတာ႔ ဘယ္စီးပြားေရးအဖြဲ႔စည္းမွ မထိန္းခ်ဳပ္ပါဘူး
microsoft ကေတာ႔
SQL Server Express and Oracle supply 10g Express ကိုေထာက္ပံေပးထားပါတယ္
အဲဒီနွစ္ခုစလံုးကိုလည္း free ေပးထားပါတယ္
အဆင္ေျပပါေစဗ်ာ
Written by cyberoot
Ref:By Craig Buckler
No comments:
Post a Comment
Thanks for your comments
Welcome from cyberoot