ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် PDO ကိုအသုံးပြုသောအခါ PDostatement :: Fetterobjection သည် query ကိုအရာဝတ်ထုတစ်ခုသို့တိုက်ရိုက်မြေပုံဆွဲနိုင်သည့်အလွန်အဆင်ပြေသောနည်းလမ်းတစ်ခုဖြစ်သည်။ သို့သော်တစ်ခါတစ်ရံတွင်ကျွန်ုပ်တို့သည်ဒေတာဘေ့စ်တွင်ကိန်းဂဏန်းအဖြစ်သတ်မှတ်သည့်နယ်ပယ်တစ်ခုဖြစ်သော လယ်ကွင်း ( Int ) အဖြစ်ပြောင်းလဲခြင်းကိုပြုလုပ်သောနယ်ပယ်ကဲ့သို့သောပြ problems နာများကြုံတွေ့ရသည်။ အချက်အလက်အမြောက်အများကိုကိုင်တွယ်ဖြေရှင်းသည့်အခါဤအခြေအနေသည်အထူးသဖြင့်ခက်ခဲသောအခြေအနေများသို့မဟုတ်တင်းကျပ်သောအချက်အလက်ဖွဲ့စည်းပုံများလိုအပ်သည်။
အကြောင်းပြချက်များနှင့်ဖြေရှင်းနည်းများကိုကြည့်ကြပါစို့။
PDostatement :: FetchObjectObject သည် database field အမျိုးအစားပေါ်မူတည်ပြီး PHP အမျိုးအစားကိုအလိုအလျောက်မသွင်းပါ။ ၎င်းသည်အချက်အလက်များကိုအရာဝတ်ထုဂုဏ်သတ္တိများသို့ဖြည့်ဆည်းပေးပြီး, အကြောင်းမှာ PDO သည်အချက်အလက်အားလုံးကို data များအားလုံးကိုပုံမှန်အားဖြင့်ပြန်လည်ပြုလုပ်ပေးသည်။
ဥပမာတစ်ခုကိုကြည့်ရအောင်။
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->query('SELECT id, name FROM users');
$user = $stmt->fetchObject();
var_dump($user);
?>
output ကိုဖြစ်လိမ့်မည်:
object(stdClass)#1 (2) {
["id"]=>
string(1) "1"
["name"]=>
string(4) "John"
}
သင်မြင်နိုင်သည့်အတိုင်း ID သည် ဒေတာဘေ့စ်တွင် INIT ကိုရိုက်ထည့်ပါကပင်ရလဒ်သည် PHP တွင် string တစ်ခုဖြစ်သည် ။
ဤပြ problem နာကိုဖြေရှင်းရန်ဘုံနည်းလမ်းများစွာရှိသည်။
PDO တွင် PDO :: Attr_Stringify_fathets ဟုခေါ်သော setting တွင်နံပါတ်များကိုကြိုးခွဲခြားရန်အလိုအလျောက်ပြောင်းလဲခြင်းရှိမရှိကိုထိန်းချုပ်နိုင်သည်။ သို့သော်ဤရွေးချယ်မှုသည် Fetch () စီးရီးလုပ်ဆောင်ချက်များတွင်သာထိရောက်မှုရှိနိုင်သည်ဟု မှတ်ချက်ပြုသင့်သည် ။
လက်တွေ့ကျသောနည်းလမ်းမှာလူတန်းစားကိုသတ်မှတ်ရန်နှင့် Magic Method တွင်အမျိုးအစားပြောင်းလဲခြင်းကိုကိုယ်တိုင်ပြုလုပ်ရန်ဖြစ်သည် ။
ဥပမာအားဖြင့်:
<?php
class User {
public int $id;
public string $name;
public function __construct() {
// အမျိုးအစား coercion ကိုဒီမှာဖျော်ဖြေနိုင်ပါတယ်
}
public function __set($name, $value) {
if ($name === 'id') {
$this->id = (int) $value;
} elseif ($name === 'name') {
$this->name = (string) $value;
}
}
}
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->query('SELECT id, name FROM users');
$user = $stmt->fetchObject(User::class);
var_dump($user);
?>
ဤနည်းအားဖြင့်သင်သည်ဒေတာဘေ့စ်မှဒေတာများကိုရယူသောအခါအမျိုးအစားမှန်ကန်မှုကိုသေချာအောင်လုပ်နိုင်သည်။
SQL ထုတ်ပြန်ချက်များတွင်ကွက်လပ်များကိုလိုအပ်သောအမျိုးအစားသို့တိုက်ရိုက်အတင်းအကျပ်လုပ်ပါ။
SELECT id + 0 AS id, name FROM users
ဤနည်းအားဖြင့်ဒေတာဘေ့စ်ပြန်ရောက်သည့်အခါ ID သည်ကိန်းတစ်ခုဖြစ်ပြီးဖြစ်သော်လည်းဤနည်းလမ်းသည်အထူးသဖြင့်လှပပြီးပြုပြင်ထိန်းသိမ်းမှုညံ့ဖျင်းသည်။ ထို့ကြောင့်ယာယီအရေးပေါ်ကယ်ဆယ်ရေးအတွက်သာသင့်လျော်သည်။
သင်၏စီမံကိန်းတွင်နေရာများစွာရှိပါက Object Mapping လိုအပ်သည့်နေရာများစွာရှိပါကအထွေထွေ Mapper Tool ကိုရေးရန်စဉ်းစားပါ။ ဥပမာအားဖြင့်:
<?php
function mapUser($data) {
$user = new User();
$user->id = (int) $data->id;
$user->name = (string) $data->name;
return $user;
}
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->query('SELECT id, name FROM users');
$rawUser = $stmt->fetchObject();
$user = mapUser($rawUser);
var_dump($user);
?>
ဤနည်းလမ်းသည်ပိုမိုထိန်းချုပ်နိုင်ပြီးစီမံခန့်ခွဲမှုဆိုင်ရာယုတ္တိဗေဒကိုနောက်အဆင့်တွင်ထည့်သွင်းခြင်းကဲ့သို့သောစီမံခန့်ခွဲမှုနှင့်ချဲ့ထွင်ရန်လွယ်ကူသည်။
Data Table Field အမျိုးအစားသည်ကျိုးကြောင်းဆီလျော်စွာဒီဇိုင်းရေးဆွဲထားပါသည် ။ ဒေတာဘေ့စ်စားပွဲရှိကွက်လပ်များကိုတတ်နိုင်သမျှရှင်းလင်းစွာရွေးချယ်ရန်ကြိုးစားပါ။ ဥပမာအားဖြင့် ID သည် Int ဖြစ်ရမည်ဖြစ်ပြီးငွေပမာဏသည် ဒ decimal မဖြစ်ရမည်။ ကိန်းဂဏန်းများအစားကြိုးများကိုမသုံးပါနှင့်။
ခိုင်မာသောအမျိုးအစားကြေငြာချက်များကို အသုံးပြု . PHP 7.4+ တွင်အမျိုးအစားအရိပ်အမြွက်များနှင့် attribute အမျိုးအစားများကြေငြာချက်များသည်အစောပိုင်းအမှားများကိုရှာဖွေတွေ့ရှိနိုင်သည်။
Unified Data Access Layer (DAL) encapsulationulation : အကယ်. စီမံကိန်းသည်ကြီးမားပါကထပ်ခါတလဲလဲလုပ်အားကိုရှောင်ရှားရန် Database Access and Object ကို adapcapsulate လုပ်ခြင်းသည်အကောင်းဆုံးလုပ်အားကိုရှောင်ရှားရန်စည်းလုံးညီညွတ်စွာဖြင့်စည်းလုံးညီညွတ်စေသည်။
FetchOccoboject ကို အသုံးပြုရန်အလွန်အဆင်ပြေသော်လည်းမှန်ကန်သောဒေတာအမျိုးအစားကိုသေချာစေရန်, များသောအားဖြင့်သင်ကိုယ်တိုင်အတန်းကိုသတ်မှတ်ရန်, ၎င်းသည် code ကိုပိုမိုခိုင်မာစေပြီးနောက်ဆက်တွဲ debugging ၏ပြ trouble နာကိုလျှော့ချနိုင်သည်။
အကယ်. အသေးစိတ်ဖော်ပြထားသည့် PDO အသုံးပြုမှုနှင့်အရာဝတ်ထုမြေပုံများကိုပိုမိုသိရှိလိုပါက https://gitbox.net/docs/pdo ကိုရည်ညွှန်းနိုင်သည်။