PDO အတန်းသည်ဒေတာဘေ့စ်နှင့်ဆက်သွယ်မှုတစ်ခုကိုဖန်တီးရန်အသုံးပြုသော constructor __Construct ကို ထောက်ပံ့ပေးသည်။ ဤဆောက်လုပ်ရေးကိုအသုံးပြုသောအခါ, အောက်ပါ parameters တွေကိုကျော်ဖြတ်ဖို့လိုတယ်။
DSN (ဒေတာအရင်းအမြစ်အမည်) - ဒေတာဘေ့စ်အမျိုးအစား, အိမ်ရှင်အမည်, ဒေတာဘေ့စ်အမည်,
Username : ဒေတာဘေ့စ်အသုံးပြုသူအမည်။
စကားဝှက် - ဒေတာဘေ့စ်စကားဝှက်။
Options (Optional) - PDO သည် Seting Error Mode, ဇာတ်ကောင်အစုံစသည်တို့ကဲ့သို့သော configuration options အချို့ကိုထောက်ပံ့ပေးသည်။
ဥပမာအားဖြင့်:
<span><span><span class="hljs-variable">$dsn</span></span><span> = </span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>;
</span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-string">'root'</span></span><span>;
</span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-variable">$options</span></span><span> = [
PDO::</span><span><span class="hljs-variable constant_">ATTR_ERRMODE</span></span><span> => PDO::</span><span><span class="hljs-variable constant_">ERRMODE_EXCEPTION</span></span><span>, </span><span><span class="hljs-comment">// ခြွင်းချက်မှအမှားကိုင်တွယ် mode ကို set</span></span><span>
PDO::</span><span><span class="hljs-variable constant_">ATTR_DEFAULT_FETCH_MODE</span></span><span> => PDO::</span><span><span class="hljs-variable constant_">FETCH_ASSOC</span></span><span>, </span><span><span class="hljs-comment">// ဒေတာများကိုပြန်လည်ရယူခြင်း၏ပုံမှန်နည်းလမ်းကိုသတ်မှတ်ပါ</span></span><span>
];
</span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-variable">$dsn</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$options</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Connection failed: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span></span>ဤဥပမာတွင် MySQL ဒေတာဘေ့စ်နှင့်ချိတ်ဆက်ရန် DSN string ကိုဖြတ်ပြီးအမှားကိုင်တွယ်မှုပုံစံကိုသတ်မှတ်ရန်။
ပုံမှန်အားဖြင့် PDO ၏အမှားကိုင်တွယ်မှုပုံစံသည် PDO :: ErrMode_silent ဖြစ်သည်။ ဆိုလိုသည်မှာခြွင်းချက်သည်မချထားပါဟုဆိုလိုသည်။ ထို့ကြောင့်သင်အမှားတစ်ခုရှိပါကပရိုဂရမ်သည်အလိုအလျောက်မချမှတ်ပါ။ ၎င်းသည်အလားအလာရှိသောအမှားအယွင်းများကိုလျစ်လျူရှုခြင်းခံရနိုင်သည်။
Code ကိုပိုမိုအားကောင်းစေရန်အတွက်အမှားကိုင်တွယ်ပုံ mode ကို PDO :: Erdomode_Exception သို့ သတ်မှတ်ရန်အကြံပြုသည်။ ဤနည်းအားဖြင့်သင်သည် try-catch ဖွဲ့စည်းပုံမှတဆင့်ခြွင်းချက်နှင့်ကိုင်တွယ်နိုင်ပါတယ်။
<span><span><span class="hljs-variable">$options</span></span><span> = [
PDO::</span><span><span class="hljs-variable constant_">ATTR_ERRMODE</span></span><span> => PDO::</span><span><span class="hljs-variable constant_">ERRMODE_EXCEPTION</span></span><span>, </span><span><span class="hljs-comment">// ချွင်းချက်ချပစ်ရန်</span></span><span>
PDO::</span><span><span class="hljs-variable constant_">ATTR_DEFAULT_FETCH_MODE</span></span><span> => PDO::</span><span><span class="hljs-variable constant_">FETCH_ASSOC</span></span><span>,
];
</span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-variable">$dsn</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$options</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Connection failed: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span></span>အထက်ဖော်ပြပါကုဒ်နံပါတ်တွင် PDO :: Atto :: PDO :: PDO :: ErrMode_Exception သည် အမှားတစ်ခုဖြစ်ပေါ်သည့်အခါ ချွင်းချက် ချမှတ်ရန်သတ်မှတ်ထားသည်။ ချွင်းချက်များကို ဖမ်းပြီး ဖမ်းမိသောလုပ်ကွက်များဖြင့်ကိုင်တွယ်ပါ,
PDO :: ErrMode_Exception_ExMode_Exception သည် ဒေတာဘေ့စ်လည်ပတ်မှုတွင်ခြွင်းချက်တစ်ခုတွင်ဖြစ်ပေါ်သောအခါ Poexception rounde ကိုအလိုအလျောက်ပစ်ချနိုင်သည်။ သင် ဤခြယ်မှု ကြေညာချက်တွင်ဤခြွင်းချက်များကိုဖမ်းမိနိုင်သည်။
<span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-variable">$dsn</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$options</span></span><span>);
</span><span><span class="hljs-comment">// ဒေတာဘေ့စစစ်ဆင်ရေးလုပ်ဆောင်ပါ</span></span><span>
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'ဒေတာဘေ့စ်ဆက်သွယ်မှုအမှား: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span></span>ဖမ်းမိသည့် ကြေညာချက်တွင်ကျွန်ုပ်တို့သည် Debugging နှင့် logging များအတွက်အလွန်အရေးကြီးသော $ E-> GetMessage () မှတဆင့်ခြွင်းချက်၏အသေးစိတ်အချက်အလက်များကိုရရှိသည်။
interface တွင်အမှားအယွင်းများကိုပြသသည့်အပြင်နောက်ဆက်တွဲခွဲခြမ်းစိတ်ဖြာခြင်းနှင့်ပြ troubl နာဖြေရှင်းခြင်းအတွက် log in log တွင်ခြွင်းချက်သတင်းအချက်အလက်များကိုမှတ်တမ်းတင်ရန်အကြံပြုသည်။ သင်ဤအချက်အလက်ကိုမှတ်တမ်းတင်ရန် PHP ၏ Error_log () function ကိုသုံးနိုင်သည်သို့မဟုတ် monolog ကဲ့သို့သောမော်လ်ခမ်းသံများကဲ့သို့ပေါင်းစပ်နိုင်သည်။
<span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-variable">$dsn</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$options</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">'ဒေတာဘေ့စ်ဆက်သွယ်မှုအမှား: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>());
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'ဒေတာဘေ့စဆက်သွယ်မှုမအောင်မြင်ပါ,ကျေးဇူးပြု. နောက်မှထပ်ကြိုးစားပါ!'</span></span><span>;
}
</span></span>အသုံးပြုသူအမည်သို့မဟုတ်စကားဝှက်သည်မမှန်ကန်ပါက PDO သည် PoException rogon ကို ချထားပါက,
<span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'invalid_user'</span></span><span>, </span><span><span class="hljs-string">'wrong_password'</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'ဒေတာဘေ့စ်ဆက်သွယ်မှုအမှား: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>(); </span><span><span class="hljs-comment">// ထုတ်လုပ်ခြင်း“Access denied”အမှား</span></span><span>
}
</span></span>သင်သတ်မှတ်ထားသောဒေတာဘေ့စ် သည် မတည်ရှိပါက,
<span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=nonexistent_db'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'ဒေတာဘေ့စ်ဆက်သွယ်မှုအမှား: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>(); </span><span><span class="hljs-comment">// ထုတ်လုပ်ခြင်း“Unknown database”အမှား</span></span><span>
}
</span></span>အကယ်. ဒေတာဘေ့စ်ဆာဗာကိုမရရှိနိုင်ပါကသို့မဟုတ်ဆက်သွယ်မှုကိုအချိန်ကုန်သက်သာပါက PDO သည်ဆက်သွယ်မှုနှင့်ဆက်စပ်သောခြွင်းချက်တစ်ခုကိုချထားသည်။
<span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=nonexistent_host;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'ဒေတာဘေ့စ်ဆက်သွယ်မှုအမှား: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>(); </span><span><span class="hljs-comment">// ထုတ်လုပ်ခြင်း“Could not find driver”သို့မဟုတ်“Connection timed out”</span></span><span>
}
</span></span>
သက်ဆိုင်သောတက်(ဂ်)များ:
PDO