လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PDostatement မှ PDostatement မှတစ်ဆင့်အရာဝတ်ထုဒေတာများကိုပုံတူတင်ခြင်းကိုမည်သို့ရှောင်ရှားရမည်နည်း

PDostatement မှ PDostatement မှတစ်ဆင့်အရာဝတ်ထုဒေတာများကိုပုံတူတင်ခြင်းကိုမည်သို့ရှောင်ရှားရမည်နည်း

gitbox 2025-05-12

PDostatement :: DetBase စစ်ဆင်ရေးအတွက် PDO ကိုအသုံးပြုသည့်အခါ fetterobject သည်အလွန်အဆင်ပြေသောလုပ်ဆောင်ချက်ဖြစ်သည်။ ၎င်းသည်ရှာဖွေမှုရလဒ်များကိုအရာဝတ်ထုများထဲသို့တိုက်ရိုက် encapsulate, လက်စွဲတာ 0 န်၏အခက်အခဲများကိုလျှော့ချနိုင်သည်။ သို့သော်မလျော်ကန်စွာအသုံးပြုပါက၎င်းသည်ပြ problems နာများဖြစ်ပေါ်စေနိုင်သည်။

ဤဆောင်းပါးသည်မိတ္တူဆိုင်သောဒေတာအရာဝတ်ထုများကိုမတင်ရန်ရှောင်ရှားရန် မှန်ကန်စွာနှင့်ထိရောက်စွာမည်သို့ထိရောက်စွာအသုံးပြု ရမည် ကိုသင်ကြားပေးမည်။

FetchOccoPject ဆိုတာဘာလဲ။

PHP တွင် PDostatement :: FetCoBjection နည်းလမ်းသည်ဒေတာဘေ့စ်စုံစမ်းမှုမှဒေတာ query မှအချက်အလက်များတစ်ခုတည်းကိုစာသင်ခန်းတစ်ခုတွင်ဖော်ပြထားသည်။ နမူနာကုဒ်သည်အောက်ပါအတိုင်းဖြစ်သည် -

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

while ($user = $stmt->fetchObject()) {
    echo $user->id . ': ' . $user->name . '<br>';
}
?>

ပုံမှန်အားဖြင့် FetchocboPJOCTOCT သည် ပုံမှန်လူတန်းစား ( stdclass ) အရာဝတ်ထုတစ်ခုသို့ပြန်ပို့သည်။

ထပ်တူအရာဝတ်ထုများ၏ပြ problem နာ၏အရင်းအမြစ်

သင်၏မေးမြန်းချက်ရလဒ်များတွင်မှတ်တမ်းများပွားများရှိသည့်မှတ်တမ်းများရှိပါကတူညီသောအချက်အလက်များမှာလည်းတူညီသောအချက်အလက်များတွင်တူညီသောအချက်အလက်များနှင့်တူညီသောအရာဝတ်ထုကို Fetchbobject မှတစ်ဆင့်တိုက်ရိုက်ပြုလုပ်ပြီး တူညီသောအချက်အလက်များနှင့်ကွဲပြားခြားနားသောအရာဝတ်ထုဖြစ်ရပ်များကိုဖန်တီးလိမ့်မည်

ဥပမာအားဖြင့်:

 $user1 = $stmt->fetchObject();
$user2 = $stmt->fetchObject();
// သော်လည်း user1 နှင့် user2 ၏ id အတူတူဖြစ်သော,它们也是不同၏对象

ဤသည်မိတ္တူပွားသည်မှတ်ဥာဏ်သည်မှတ်ဉာဏ်ကိုဖြုန်းတီးပစ်ရုံသာမကအထူးသဖြင့်စီမံကိန်းကြီးများသို့မဟုတ်ရှုပ်ထွေးသောဒေတာအသင်းခွဲများတွင်ရှေ့နောက်မညီသောအချက်အလက်များနှင့်ပြ problems နာများကိုလည်းပြ problems နာဖြစ်စေနိုင်သည်။

ပုံတူတင်ခြင်းကိုဘယ်လိုရှောင်ရှားရမလဲ။

1 ။ အရာဝတ်ထု cache ကိုသုံးပါ (Object Pool Mode)

အရာဝတ်ထုတစ်ခုကို FetchOccoboject မှတဆင့်ထုတ်လုပ်သည့်အခါတိုင်းတူညီသော ID နှင့်အတူအရာဝတ်ထုတစ်ခုရှိပြီးသားရှိမရှိစစ်ဆေးပါ။ အကယ်. ၎င်းသည်တည်ရှိပါကပြန်လည်အသုံးပြုပြီးပြန်လည်အသုံးပြုမည်မဟုတ်ပါ။

ဥပမာ -

 <?php
class User {
    public $id;
    public $name;
}

$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'pass');
$stmt = $pdo->query('SELECT id, name FROM users');

$users = []; // 用来缓存已经加载၏对象

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $id = $row['id'];
    if (!isset($users[$id])) {
        $user = new User();
        $user->id = $row['id'];
        $user->name = $row['name'];
        $users[$id] = $user;
    }
    // ပြီးသားတည်ရှိလျှင်,ပြန်လည်အသုံးပြု $users[$id]
}

ဤလက်စွဲစာအုပ်လုပ်ဆောင်ခြင်းသည်တူညီသောအချက်အလက်များကိုတစ်ကြိမ်သာစဉ်းစားရန်သေချာစေနိုင်သည်။

2 ။ FetchObject အပြုအမူကိုစိတ်ကြိုက်ပြုလုပ်ပါ

၎င်းကို Class Constructor တွင် FetCObjectobject တွင် FetCoboPject တွင်ဖြတ်သန်းခြင်းနှင့် ID Constructor တွင်အကောင်အထည်ဖော်ခြင်းအားဖြင့်၎င်းကိုထပ်မံအလိုအလျောက်ပြုလုပ်နိုင်သည်။

ဥပမာအားဖြင့်:

 <?php
class User {
    private static $instances = [];

    public $id;
    public $name;

    public function __construct() {
        // ပြင်ပညွှန်ကြားချက်တားမြစ် new,အသုံးပြု create နည်းလမ်း
    }

    public static function create($row) {
        if (isset(self::$instances[$row['id']])) {
            return self::$instances[$row['id']];
        }

        $obj = new self();
        $obj->id = $row['id'];
        $obj->name = $row['name'];
        self::$instances[$row['id']] = $obj;

        return $obj;
    }
}

$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'pass');
$stmt = $pdo->query('SELECT id, name FROM users');

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $user = User::create($row);
}
?>

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

3 ။ SQL Query များကိုထပ်တူအချက်အလက်များရှာဖွေခြင်းကိုရှောင်ရှားရန်တတ်နိုင်သမျှအကောင်းဆုံးဖြစ်အောင်လုပ်ပါ

တခါတရံ SQL Query များကိုကောင်းစွာရေးသားထားသောကြောင့်, ဥပမာအားဖြင့်, သင်သည်ပူးပေါင်းလုပ်ဆောင်သည့်အခါမှန်ကန်စွာမကျွေးပါက,

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

ဥပမာအားဖြင့်:

 SELECT DISTINCT users.id, users.name
FROM users
LEFT JOIN orders ON orders.user_id = users.id

၎င်းသည်အချက်အလက်များ၏ရင်းမြစ်တွင်မိတ္တူပွားမှတ်တမ်းများကိုလျှော့ချပြီးပြ the နာကိုအခြေခံအားဖြင့်ဖြေရှင်းနိုင်သည်။

အကျဉ်းချုပ်

PDostatement :: Fetchobject ကိုအသုံးပြုပြီးဖြစ်သော်လည်းအရာဝတ်ထု၏ထူးခြားမှုကိုသင်အာရုံစိုက်သင့်သည်။ အကျဥ်းရုံးသည်:

  • ကြီးမားသောစီမံကိန်းများအတွက် Object Cache သို့မဟုတ် Object Pooling Mode နှင့်ပူးပေါင်းရန်အကြံပြုသည်။

  • သေးငယ်တဲ့စီမံကိန်းတွေအတွက် SQL ကို optizerly optizerizing sql သည်ပုံတူပွားမှုအများဆုံးပြ problems နာများကိုရှောင်ရှားနိုင်သည်။

  • အကယ်. တင်းကျပ်သောအရာဝတ်ထုစီမံခန့်ခွဲမှုလိုအပ်ပါက FetchOccobject လုပ်ငန်းစဉ်ကိုကိုယ်တိုင် encapsulating ကိုသင်စဉ်းစားနိုင်သည်။

PDO ကျွမ်းကျင်မှုအကြောင်းပိုမိုလေ့လာလိုပါကသို့မဟုတ် PHP Data Access Layer Encapsulationsulationsulations လိုအပ်ပါက https:/gitbox.net/php-Troments များကို ပိုမိုအသေးစိတ်ဖော်ပြရန်အကြံပြုသည်။