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

PDostatement ၏ပြန်လာတန်ဖိုးကိုမည်သို့ကိုင်တွယ်ရမည်နည်း :: Fetchobject Bolumn အမျိုးအစားသည်ကိုက်ညီမှုမရှိပါ

gitbox 2025-05-29

PDostatement :: PHP တွင် PDO ကို အသုံးပြု. ဒေတာဘေ့စ်ကိုအသုံးပြုသောအခါ DetComBase သည်အလွန်လက်တွေ့ကျသောနည်းလမ်းဖြစ်သည်။ ၎င်းသည်စံချိန်တင်တစ်ခုအဖြစ်အရာဝတ်ထုတစ်ခုအဖြစ်ပြန်ပို့ပြီးကော်လံတစ်ခုစီ၏တန်ဖိုးကိုအရာဝတ်ထု၏ဂုဏ်သတ္တိများသို့သတ်မှတ်နိုင်သည်။ သို့သော်ဒေတာဘေ့စ်ကော်လံအမျိုးအစားသည်မျှော်လင့်ထားသည့်ရည်မှန်းချက်ပန်းတိုင်၏ပိုင်ဆိုင်မှုအမျိုးအစားကိုမကိုက်ညီသောအခါရှုပ်ထွေးသောပြ problems နာအချို့ကိုဖြစ်ပေါ်လာသောပြ problems နာအချို့ကိုပေါ်ပေါက်လာနိုင်သည်။

နောက်ခံနောက်ခံ

 class User {
    public int $id;
    public string $name;
    public bool $is_active;
}

$stmt = $pdo->query('SELECT id, name, is_active FROM users');
$user = $stmt->fetchObject('User');

အသုံးပြုသူများ ဇယားရှိ is_active ကော်လံသည် Tinyt (1) type ဖြစ်ပြီး အသုံးပြုသူ အတန်းထဲတွင်ကျွန်ုပ်တို့သည် bool အမျိုးအစားကိုသတ်မှတ်သည်ဆိုပါစို့။ အကယ်. IS_ICESICE ၏တန်ဖိုးသည် 1 သို့မဟုတ် 0 ဖြစ်ပါက၎င်းသည်၎င်းကိုအလိုအလျောက်သို့မဟုတ် မှားယွင်းသော ဘာသာ ပြောင်းရန်အလိုအလျောက်ကူးပြောင်းလိမ့်မည်ဟုသင်မျှော်လင့်နိုင်သည်။ သို့သော်လက်တွေ့တွင် PHP သည် PHP အမျိုးအစားများ၏တန်ဖိုးများကိုတိုက်ရိုက်သတ်မှတ်လိမ့်မည်။ ၎င်းသည်ရှေ့နောက်မညီမှုအမျိုးအစားများကိုဖြစ်ပေါ်စေပြီးအမှားအယွင်းများကိုတင်းကျပ်သောအမျိုးအစားတွင်ပင်ပစ်ချလိမ့်မည်။

fetchocbject ၏အပြုအမူနိယာမ

Fetchobject အတွင်း၌ဒေတာဘေ့စ်၏ကွက်လပ်သည် __s မဆို ( သို့မဟုတ်တိုက်ရိုက်တာ 0 န်ကို ဖြတ်. အရာ 0 တ်ထုများသို့ 0 တ်ဆင်ရန်နေရာယူနိုင်သည်။ ၎င်းသည်အမျိုးအစားပြောင်းလဲခြင်းကိုမလုပ်ဆောင်သော်လည်းဒေတာဘေ့စ်၏မူလတန်ဖိုးအရတန်ဖိုးကိုတိုက်ရိုက်သတ်မှတ်သည်။ အဓိပ်ပါယျမှာ:

  • ဒေတာဘေ့စ်တွင် int တန်ဖိုးသည် PHP Int ဖြစ်လာလိမ့်မည်

  • Varchar string ကို ဖြစ်လာပါလိမ့်မယ်

  • Tinyint (1) ကို boolean တန်ဖိုးများအတွက်မကြာခဏအသုံးပြုသော်လည်း၎င်းသည်အမှန်တကယ်ကိန်းဂဏန်းအမျိုးအစားဖြစ်သည်

ကြေငြာခြင်း၏အမှတ်အသား (stript_types = 1) သို့မဟုတ် PHP 8.2+ ကိုအားကောင်းလာပြီးနောက်, PHP 8.2+ ကိုအားဖြည့်သည်။

အဖေြ

နည်းလမ်း 1: လက်စွဲစာအုပ်အမျိုးအစားပြောင်းလဲခြင်း (အကြံပြုသည်)

လုံခြုံစိတ်ချရသောချဉ်းကပ်နည်းသည်ကွင်းဆင်းတစ်ခုစီကိုအရာဝတ်ထုတစ်ခုရရှိပြီးနောက်သင့်လျော်သောအမျိုးအစားသို့ပြောင်းရန်ဖြစ်သည်။ ဤနည်းလမ်းသည်အလုံခြုံဆုံးနှင့်အများဆုံးဖတ်နိုင်သောဖြစ်သည်။

 $user = $stmt->fetchObject('User');
if ($user !== false) {
    $user->id = (int)$user->id;
    $user->name = (string)$user->name;
    $user->is_active = (bool)$user->is_active;
}

နည်းလမ်း 2. parameters တွေကိုလက်ခံရန်ဆောက်လုပ်ရေးကိုသုံးပါ

FetchObject သည် ဆောက်လုပ်ရေး parameters များကိုဖြတ်သန်းသွားသောအထောက်အပံ့များ။ အကယ်. သင်သည်အစပြုဒေတာများကိုလက်ခံသောဆောက်လုပ်ရေးလုပ်ငန်းကိုဒီဇိုင်းဆွဲထားပါကသင်သည်ပုံစံပြောင်းလဲခြင်းပုံစံကိုလျောက်ပတ်စွာအကောင်အထည်ဖော်နိုင်သည်။

 class User {
    public function __construct(
        public int $id,
        public string $name,
        public bool $is_active
    ) {}
}

$stmt = $pdo->query('SELECT id, name, is_active FROM users');
$user = $stmt->fetchObject('User');

သို့သော်ဤနေရာတွင်ပြ the နာမှာ - ဒေတာဘေ့စ်ကော်လံအမိန့်သည်ကိုက်ညီမှုမရှိပါကလယ်ကွင်းများသည်အတိအကျနှင့်မကိုက်ညီပါကခြွင်းချက်များကိုပစ်ချနိုင်သည်။

နည်းလမ်း 3: စက်ရုံအတန်းကိုပြုပြင်ရန်

အကယ်. ဒေတာပမာဏသည်ကြီးမားသည်သို့မဟုတ်အရာဝတ်ထုဖွဲ့စည်းပုံသည်ရှုပ်ထွေးပါကပြောင်းလဲခြင်းယုတ္တိဗေဒကိုကိုင်တွယ်ရန်စက်ရုံအတန်းကိုအသုံးပြုပါ။

 class UserFactory {
    public static function fromDb(stdClass $row): User {
        return new User(
            (int)$row->id,
            (string)$row->name,
            (bool)$row->is_active
        );
    }
}

$stmt = $pdo->query('SELECT id, name, is_active FROM users');
$row = $stmt->fetchObject();
if ($row !== false) {
    $user = UserFactory::fromDb($row);
}

ဒီဟာက code ပိုရှိသော်လည်းဖွဲ့စည်းပုံရှင်းရှင်းလင်းလင်းရှိပြီးယုတ္တိဗေဒသည်ဗဟိုစစ်ဆေးမှုနှင့်ပြုပြင်ထိန်းသိမ်းမှုကိုလွယ်ကူစေသည်။

နည်းလမ်း 4 - PDO ၏ fetter_class mode ကိုသတ်မှတ်ပါ။

PDO :: fetter_class ကို သုံးနိုင်သည် PDO :: fetter_propops_late mode, သို့သော်သင်သည်ပြောင်းလဲခြင်းပြ problem နာကိုအာရုံစိုက်ရန်လိုအပ်သည်။ PHP သည်အတွင်းပိုင်းအမျိုးအစားအခွကိုမပြုလုပ်ပါ။

 $stmt = $pdo->query('SELECT id, name, is_active FROM users');
$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'User');
$user = $stmt->fetch();

အထက်တွင်ဖော်ပြခဲ့သည့်အတိုင်းကုဒ်ကိုရိုးရှင်းစွာရသော်လည်းအမျိုးအစားကိုမဖြစ်မနေပြ problem နာကိုမဖြေရှင်းနိုင်သေးပါ။

အကျဉ်းချုပ်

PDostatement :: FetCoboject ကို အသုံးပြုသည့်အခါ Object Extraction အတွက် Database Field အမျိုးအစားများနှင့်အရာဝတ်ထု attribute အမျိုးအစားများအကြားစာပေးစာယူကိုဂရုပြုရန်သေချာပါစေ။ PHP သည်အသိဉာဏ်ရှိသောပြောင်းလဲမှုများကိုအလိုအလျောက်လုပ်ဆောင်ခြင်းမဟုတ်ပါ, အထူးသဖြင့်အမျိုးအစားအချက်ကိုဖွင့်ပြီးနောက် developer များသည်ပြောင်းလဲခြင်းယုတ္တိဗေဒကိုအတိအလင်းကိုင်တွယ်ရန်လိုအပ်သည်။ အကြံပြုချက်အရှိဆုံးနည်းလမ်းမှာစက်ရုံအတန်းများသို့မဟုတ်လက်စွဲအသွင်ပြောင်းမှုများကို အသုံးပြု. ဒေတာထုတ်ယူခြင်းနှင့်အရာဝတ်ထုဆောက်လုပ်ခြင်းကိုဖယ်ရှားရန်ဖြစ်သည်။

ပိုမိုဆက်စပ်သောဥပမာများအတွက် https://gitbox.net/pdo/fetdo/fetset/pdo/fetsebect --type