လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PDostatement မှ Dynamic Data Access ကိုရယူရန်မည်သို့အောင်မြင်ရန် :: ရောင်ပြန်ဟပ်မှုနှင့်ပေါင်းစပ်ခြင်း

PDostatement မှ Dynamic Data Access ကိုရယူရန်မည်သို့အောင်မြင်ရန် :: ရောင်ပြန်ဟပ်မှုနှင့်ပေါင်းစပ်ခြင်း

gitbox 2025-05-29

PHP Database Development Development တွင် PDostatement :: Fetchobject :: Fetchobject သည် query query ကိုအရာဝတ်ထုများသို့တိုက်ရိုက်မြေပုံဆွဲနိုင်သည့်အလွန်လက်တွေ့ကျသောနည်းလမ်းဖြစ်သည်။ PHP ၏ရောင်ပြန်ဟပ်မှုယန္တရားကိုပေါင်းစပ်ပါကပိုမိုပြောင်းလွယ်ပြင်လွယ်။ ပြောင်းလဲနေသောဒေတာများကို ထပ်မံ. ထပ်မံအကောင်အထည်ဖော်နိုင်သည်။ ဤဆောင်းပါးသည်မည်သို့ပြုလုပ်ရမည်ကိုအသေးစိတ်ရှင်းပြပြီးလက်တွေ့ကျပုံသက်သေပြပါလိမ့်မည်။

1 ။ အခြေခံအားဖြင့် fetchobject ကို အသုံးပြုပါ

ယေဘုယျအားဖြင့် Fetchobject သည် စုံစမ်းမှု၏အတန်းကိုတိုက်ရိုက်ပြောင်းလဲနိုင်သည်။ ဥပမာအားဖြင့်:

 <?php
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'password');
$stmt = $pdo->query('SELECT id, name, email FROM users');
$user = $stmt->fetchObject('User');

အသုံးပြုသူ အတန်းသည် ID , အမည် နှင့် အီးမေးလ် ကဲ့သို့သောအများပြည်သူ attribute များကိုသတ်မှတ်ပါက PDO သည် တန်ဖိုးများကိုအလိုအလျောက်သတ်မှတ်လိမ့်မည်။

သို့သော်ကျွန်ုပ်တို့၏အတန်းဖွဲ့စည်းပုံသည်ရှုပ်ထွေးသောအခါရှုပ်ထွေးသော Parameterser ရှိ Parameterser တွင် Parametersters သို့သွားရန်လိုအပ်ပါကသို့မဟုတ် အိမ်ခြံမြေ များမှာပုဂ္ဂလိကပိုင်ဖြစ်သည်။

2 ။ ရောင်ပြန်ဟပ်ခြင်း,

PHP ၏ရောင်ပြန်ဟပ်မှုယန္တရားသည်ကျွန်ုပ်တို့အား Runtime တွင်ဂုဏ်သတ္တိများ, အတန်းများ,

ဥပမာ: ရောင်ပြန်ဟပ်ခြင်းအားဖြင့် fetCoboject ကို တိုးတက်အောင်လုပ်ပါ

 <?php
class User
{
    private int $id;
    private string $name;
    private string $email;

    public function __construct(int $id, string $name, string $email)
    {
        $this->id = $id;
        $this->name = $name;
        $this->email = $email;
    }
    
    public function getProfileUrl(): string
    {
        return 'https://gitbox.net/user/' . $this->id;
    }
}

// ဒေတာဘေ့စ် connection တစ်ခုဖန်တီးပါ
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'password');
$stmt = $pdo->query('SELECT id, name, email FROM users');

// စုံစမ်းမှုရလဒ်များကိုရယူပါ
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $reflectionClass = new ReflectionClass(User::class);
    $user = $reflectionClass->newInstanceArgs([
        (int)$row['id'],
        (string)$row['name'],
        (string)$row['email']
    ]);
    
    echo $user->getProfileUrl() . PHP_EOL;
}

ဤဥပမာတွင် RefnessionClass :: NewnisstanceARGS သည်အများပြည်သူဆိုင်ရာဂုဏ်သတ္တိများကိုတိုက်ရိုက်တာ 0 န်ယူရန်မလိုအပ်တော့ပါ။ ဤချဉ်းကပ်မှုသည်ပိုမိုရှုပ်ထွေးသောဆောက်လုပ်ရေးလိုအပ်ချက်များကိုကိုင်တွယ်နိုင်သည်။

3 ။ အထွေထွေနည်းလမ်းအဖြစ် encapsultulatuulate

ကုဒ်ပြန်သုံးမှုတိုးတက်စေရန်ကျွန်ုပ်တို့သည်အထက်ပါယုတ္တိဗေဒကိုအထွေထွေလုပ်ဆောင်ချက်တစ်ခုအဖြစ်ကျွန်ုပ်တို့ oncapsate လုပ်နိုင်သည်။

 <?php
function fetchAllAsObjects(PDOStatement $stmt, string $className): array
{
    $results = [];
    $reflectionClass = new ReflectionClass($className);
    
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $object = $reflectionClass->newInstanceArgs(array_values($row));
        $results[] = $object;
    }
    
    return $results;
}

// အသုံးပြုမှုဥပမာ
$stmt = $pdo->query('SELECT id, name, email FROM users');
$users = fetchAllAsObjects($stmt, User::class);

foreach ($users as $user) {
    echo $user->getProfileUrl() . PHP_EOL;
}

သတိပြုရန်:

  • စုံစမ်းမှုရလဒ်များ၏ကော်လံအမိန့်သည် constructor parameter parameter အမိန့်နှင့်ကိုက်ညီမှုရှိစေရန်အတွက်နောက်ထပ်အပြောင်းအလဲနဲ့လိုအပ်သည်။

  • ပိုမိုရှုပ်ထွေးသောအခြေအနေများအတွက် parameter binding ကို reflectionmethod ကို မှတစ်ဆင့်အပြီးသတ်ထိန်းချုပ်နိုင်သည်။

4 ။ မှတ်စုများ

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

  • အကယ်. ကော်လံအမည်နှင့်အတန်းအစား attribute သည်ကိုက်ညီမှုမရှိပါကကော်လံ -to-parameter သည်မြေပုံတစ်ခုလိုအပ်သည်။ ဤအချိန်တွင် Parameter name နှင့် column name အကြားစာပေးစာယူကိုထည့်ခြင်းကဲ့သို့သောနောက်ထပ် encapsultulation များကိုနောက်ထပ် encapsultulation များကိုထပ်မံသက်လိုက်နိုင်သည်။

  • အကယ်. သင်၏လျှောက်လွှာတွင်ဤပုံစံကိုကျယ်ကျယ်ပြန့်ပြန့်အသုံးပြုပါကအလိုအလျောက်အလိုအလျှောက်စာကြည့်တိုက်များကိုအလိုအလျောက်ထည့်သွင်းစဉ်းစားပါ။

5 ။ နိဂုံးချုပ်

PDostatement :: DetCompect နှင့်ရောင်ပြန်ဟပ်မှုယန္တရားကိုပေါင်းစပ်ခြင်းအားဖြင့်ဒေတာဘေ့စ်စုံစမ်းမှုသည်ရှုပ်ထွေးသောအရာများကိုရှုပ်ထွေးသောအရာဝတ်ထုများအဖြစ်ပြောင်းလဲနိုင်သည်။ သင်ပိုမိုနက်ရှိုင်းသောအလေ့အကျင့်များကိုပိုမိုလေ့လာလိုပါက https://gitbox.net/blog/pdo-refloke-explox သို့ဝင်ရောက်ကြည့်ရှုနိုင်သည်။