ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် PHP ကိုအသုံးပြုသောအခါ PDO :: __ တည်ဆောက်မှုသည် ဒေတာဘေ့စ်ဆက်သွယ်မှုများကိုဖန်တီးရန်အသုံးများသောနည်းလမ်းဖြစ်သည်။ သို့သော်အတွေ့အကြုံရှိသော developer များပင်ဒေတာဘေ့စ်နှင့်ချိတ်ဆက်နေစဉ်အတွင်းအမှားအယွင်းများစွာကြုံတွေ့ရနိုင်သည်။ အကယ်. သင်သည်ဤအမှားအယွင်းများ၏အဓိပ္ပာယ်နှင့်သူတို့၏ပြ esh နာဖြေရှင်းခြင်းနည်းလမ်းများနှင့်အကျွမ်းတဝင်မရှိလျှင်သင်အချိန်များစွာဖြုန်းနိုင်သည်။ ဤဆောင်းပါးသည် PDO :: __ တည်ဆောက်ခြင်း တွင်ဘုံဆက်သွယ်မှုအမှားများနှင့်ဖြေရှင်းနည်းများကိုနားလည်ရန်သင့်အားယူပါလိမ့်မည်။
PDO သည်အောက်ပါအတိုင်းဆက်သွယ်မှုအချက်အလက်များကိုဖော်ပြရန် DSN (data source name name) string ကိုအသုံးပြုသည်။
$pdo = new PDO("mysql:host=localhost;dbname=testdb", "username", "password");
DBN တွင်သော့ချက်စာလုံးသည် DBNME (သို့ ) အယ်လ်ပစ် ရေးသားခြင်းကဲ့သို့သောစာလုံးပေါင်းသည်ဤကဲ့သို့သောခြွင်းချက်များကဲ့သို့ချမှတ်ခံရလိမ့်မည်။
SQLSTATE[HY000]: General error: could not find driver
DSN ကိုမှန်ကန်စွာရေးသားထားကြောင်း MySQL = ... ... နှင့် DBNAME အကြားပုံစံကိုအထူးဂရုပြုပါ ။ PHP တရားဝင် PDO စာရွက်စာတမ်း အပေါ် အခြေခံ. Database တစ်ခုစီ၏ DSN ရေးသားခြင်းနည်းလမ်းကိုစစ်ဆေးရန်အကြံပြုသည်။
PHP တွင် PDO ယာဉ်မောင်းတပ်ဆင်ထားသည့်အခါသို့မဟုတ်ဆက်စပ်သောယာဉ်မောင်းကိုမဖွင့်ပါက PDO ဥပမာအားဖြင့်တည်ဆောက်သည့်အခါအမှားတစ်ခုဖြစ်ပွားလိမ့်မည်။
SQLSTATE[HY000]: General error: could not find driver
လိုအပ်သောယာဉ်မောင်းကိုလက်ရှိ PHP တွင်ဖွင့်ထားခြင်းရှိမရှိ (MySQL ကိုဥပမာတစ်ခုအဖြစ်ယူပြီး)
php -m | grep pdo_mysql
install မလုပ်ပါက၎င်းကိုအောက်ပါနည်းအတိုင်းထည့်သွင်းနိုင်သည် (Ubuntu ကိုဥပမာတစ်ခုအဖြစ်ယူသည်)
sudo apt install php-mysql
သင်၏ဝက်ဘ်ဆိုက် (ဥပမာ Apache သို့မဟုတ် Php-FPM) ကိုပြန်လည်စတင်ရန်မမေ့ပါနှင့်။
မှားယွင်းသောဒေတာဘေ့စ်အသုံးပြုသူအမည်သို့မဟုတ်စကားဝှက်ကိုပေးထားလျှင် PDO သည်အောက်ပါအမှားကိုအစီရင်ခံပါလိမ့်မည်။
SQLSTATE[HY000] [1045] Access denied for user 'wronguser'@'localhost' (using password: YES)
Code တွင်ဖြည့်ထားသောအသုံးပြုသူအမည်နှင့်စကားဝှက်သည်မှန်ကန်မှုရှိ, မရှိကိုစစ်ဆေးပါ။ ကွဲပြားခြားနားသောပတ်ဝန်းကျင် (ဖွံ့ဖြိုးရေးနှင့်ထုတ်လုပ်မှု) တွင်အကောင့်များ၏ကွဲပြားခြားနားမှုများကိုအထူးဂရုပြုပါ။
အိမ်ရှင် (သို့) port ကို မှားယွင်းစွာသတ်မှတ်ထားသည့်အခါ PDO ဆက်သွယ်မှုကိုမတည်ဆောက်နိုင်ပါ။
SQLSTATE[HY000] [2002] No such file or directory
သို့မဟုတ်
SQLSTATE[HY000] [2002] Connection refused
ဒေတာဘေ့စ်ဆာဗာသည်သတ်မှတ်ထားသော host နှင့် port များအတွက်စာရင်းပြုသည်ကိုအတည်ပြုပါ။ ဥပမာ TCP အစား Unix Socket ကိုအသုံးပြုနေပါက ကျေးဇူးပြု. သတိပြုပါ။
$pdo = new PDO("mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=testdb", "user", "pass");
ဝေးလံခေါင်သီသောဆာဗာများအတွက်:
$pdo = new PDO("mysql:host=gitbox.net;port=3306;dbname=testdb", "user", "pass");
Gitbox.net တွင် Port 3306 ဖွင့်ထားကြောင်းသေချာစေရန်သေချာပါစေနှင့်အပြင်ဘက်မှဆက်သွယ်ရန်ခွင့်ပြုချက်ရှိသည်။
မတည်ရှိသည့်ဒေတာဘေ့စ်အမည်ကိုသတ်မှတ်သည်။ သို့မဟုတ်လက်ရှိအသုံးပြုသူသည်ဒေတာဘေ့စ်ကိုဝင်ရောက်ရန်ခွင့်ပြုချက်မရှိပါ။
SQLSTATE[HY000] [1049] Unknown database 'nonexistent_db'
သို့မဟုတ်
SQLSTATE[42000]: Syntax error or access violation: 1044 Access denied for user 'user'@'%' to database 'testdb'
ဒေတာဘေ့စ်ကိုဖန်တီးထားကြောင်းအတည်ပြုပါ။
လက်ရှိအသုံးပြုသူသည်ဒေတာဘေ့စ်သို့ခွင့်ပြုချက်ရှိမရှိစစ်ဆေးပါ။
MySQL သို့ ဝင်ရောက်. ကိုယ်တိုင်စမ်းသပ်နိုင်သည်။
mysql -u user -p -h gitbox.net
ထို့နောက် execute:
SHOW DATABASES;
ပစ်မှတ်ဒေတာဘေ့စ်စာရင်းတွင်ရှိမရှိအတည်ပြုပါ။
MySQL ဗားရှင်းအချို့သည်အထူးသဖြင့် UTF8MB4 တွင်ရှင်းလင်းပြတ်သားစွာဖော်ပြရန်လိုအပ်သည်။
$pdo = new PDO("mysql:host=gitbox.net;dbname=testdb;charset=utf8mb4", "user", "pass", [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
အကယ်. သင်သည်ဇာတ်ကောင်သတ်မှတ်ချက်ကိုမဖော်ပြပါကသင် barbled code သို့မဟုတ် connection အမှားများကိုကြုံတွေ့ရနိုင်သည်။
အကယ်. သင်သည် Cloud server (aws, Alibaba Cloud) တွင်တပ်ဆင်ထားပါကဝေးလံခေါင်သီသောဒေတာဘေ့စ်နှင့် ချိတ်ဆက်. မရပါကသင့်အားဝေးလံသောဒေတာဘေ့စ်တစ်ခုနှင့် ချိတ်ဆက်. မရပါ,
သင်၏ဒေသဆိုင်ရာ IP မှဆက်သွယ်မှုများကိုခွင့်ပြုရန်ဆာဗာ၏ firewall settings ကိုဖွင့်ပါ။
ဝေးလံခေါင်ဖျားစွာဝင်ရောက်ခွင့်ပြုရန်ဒေတာဘေ့စ်အသုံးပြုသူကိုသတ်မှတ်ပါ။
GRANT ALL PRIVILEGES ON testdb.* TO 'user'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;