လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PDO တွင် CARE ဆက်သွယ်မှုအမှားများနှင့်ဖြေရှင်းနည်းများ

PDO တွင် CARE ဆက်သွယ်မှုအမှားများနှင့်ဖြေရှင်းနည်းများ

gitbox 2025-05-28

ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် PHP ကိုအသုံးပြုသောအခါ PDO :: __ တည်ဆောက်မှုသည် ဒေတာဘေ့စ်ဆက်သွယ်မှုများကိုဖန်တီးရန်အသုံးများသောနည်းလမ်းဖြစ်သည်။ သို့သော်အတွေ့အကြုံရှိသော developer များပင်ဒေတာဘေ့စ်နှင့်ချိတ်ဆက်နေစဉ်အတွင်းအမှားအယွင်းများစွာကြုံတွေ့ရနိုင်သည်။ အကယ်. သင်သည်ဤအမှားအယွင်းများ၏အဓိပ္ပာယ်နှင့်သူတို့၏ပြ esh နာဖြေရှင်းခြင်းနည်းလမ်းများနှင့်အကျွမ်းတဝင်မရှိလျှင်သင်အချိန်များစွာဖြုန်းနိုင်သည်။ ဤဆောင်းပါးသည် PDO :: __ တည်ဆောက်ခြင်း တွင်ဘုံဆက်သွယ်မှုအမှားများနှင့်ဖြေရှင်းနည်းများကိုနားလည်ရန်သင့်အားယူပါလိမ့်မည်။

1 ။ ဆက်သွယ်မှု string ကိုအမှား (DSN စာလုံးပေါင်းအမှား)

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 ရေးသားခြင်းနည်းလမ်းကိုစစ်ဆေးရန်အကြံပြုသည်။

2 ။ ယာဉ်မောင်းကို install လုပ်ထားခြင်းမရှိပါ

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) ကိုပြန်လည်စတင်ရန်မမေ့ပါနှင့်။

3 ။ အသုံးပြုသူအမည်သို့မဟုတ်စကားဝှက်အမှား

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

 SQLSTATE[HY000] [1045] Access denied for user 'wronguser'@'localhost' (using password: YES)

ဖြေရှင်းချက် -

Code တွင်ဖြည့်ထားသောအသုံးပြုသူအမည်နှင့်စကားဝှက်သည်မှန်ကန်မှုရှိ, မရှိကိုစစ်ဆေးပါ။ ကွဲပြားခြားနားသောပတ်ဝန်းကျင် (ဖွံ့ဖြိုးရေးနှင့်ထုတ်လုပ်မှု) တွင်အကောင့်များ၏ကွဲပြားခြားနားမှုများကိုအထူးဂရုပြုပါ။

4 ။ အိမ်ရှင်အမည်သို့မဟုတ် port နံပါတ်မမှန်ကန်ပါ

အိမ်ရှင် (သို့) 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 ဖွင့်ထားကြောင်းသေချာစေရန်သေချာပါစေနှင့်အပြင်ဘက်မှဆက်သွယ်ရန်ခွင့်ပြုချက်ရှိသည်။

5 ။ ဒေတာဘေ့စ်သည်မတည်ရှိပါသို့မဟုတ်၎င်းကိုရယူရန်ခွင့်ပြုချက်မရှိပါ

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

 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;

ပစ်မှတ်ဒေတာဘေ့စ်စာရင်းတွင်ရှိမရှိအတည်ပြုပါ။

6 ။ ဇာတ်ကောင် set အမှား (အထူးသဖြင့် MySQL ၏ပိုမိုမြင့်မားသောဗားရှင်း)

MySQL ဗားရှင်းအချို့သည်အထူးသဖြင့် UTF8MB4 တွင်ရှင်းလင်းပြတ်သားစွာဖော်ပြရန်လိုအပ်သည်။

 $pdo = new PDO("mysql:host=gitbox.net;dbname=testdb;charset=utf8mb4", "user", "pass", [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);

အကယ်. သင်သည်ဇာတ်ကောင်သတ်မှတ်ချက်ကိုမဖော်ပြပါကသင် barbled code သို့မဟုတ် connection အမှားများကိုကြုံတွေ့ရနိုင်သည်။

7 ။ Firewall သို့မဟုတ်လုံခြုံရေးအုပ်စုကန့်သတ်ချက်များ

အကယ်. သင်သည် Cloud server (aws, Alibaba Cloud) တွင်တပ်ဆင်ထားပါကဝေးလံခေါင်သီသောဒေတာဘေ့စ်နှင့် ချိတ်ဆက်. မရပါကသင့်အားဝေးလံသောဒေတာဘေ့စ်တစ်ခုနှင့် ချိတ်ဆက်. မရပါ,

ဖြေရှင်းချက် -

  • သင်၏ဒေသဆိုင်ရာ IP မှဆက်သွယ်မှုများကိုခွင့်ပြုရန်ဆာဗာ၏ firewall settings ကိုဖွင့်ပါ။

  • ဝေးလံခေါင်ဖျားစွာဝင်ရောက်ခွင့်ပြုရန်ဒေတာဘေ့စ်အသုံးပြုသူကိုသတ်မှတ်ပါ။

 GRANT ALL PRIVILEGES ON testdb.* TO 'user'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;