လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PDostatement :: Memory Data Query တွင်မှတ်ဉာဏ်ယိုစိမ့်မှုမှ FetCoboject ဖြေရှင်းချက်

PDostatement :: Memory Data Query တွင်မှတ်ဉာဏ်ယိုစိမ့်မှုမှ FetCoboject ဖြေရှင်းချက်

gitbox 2025-05-12

PHP Development တွင် PDostatement :: Setostatement :: Fetchobject သည်အထူးသဖြင့်အရာဝတ်ထု ဦး တည်သည့်ဒေတာအဆောက်အအုံများကိုကိုင်တွယ်ရာတွင်အထူးသဖြင့်နံပါတ်များရရန်အလွန်အသုံးများသောနည်းလမ်းဖြစ်သည်။ သို့သော်စုံစမ်းမှုရလဒ်များသည် (ဥပမာထောင်ပေါင်းများစွာသောမှတ်တမ်းရာပေါင်းများစွာကဲ့သို့) အလွန်ကြီးမားသောအခါမမှန်ကန်သောအသုံးပြုမှုသည်ကြီးမားသောပြ problems နာများကိုဖြစ်ပေါ်စေပြီး PHP scripts များကိုပင်ပျက်စီးစေနိုင်သည်။

ဤဆောင်းပါးသည်ဤပြ problem နာ၏အကြောင်းရင်းများကိုအသေးစိတ်လေ့လာပြီးလက်တွေ့ကျသောဖြေရှင်းနည်းများကိုဆန်းစစ်ပါလိမ့်မည်။

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

FetchObject ကို ကျွန်ုပ်တို့အသုံးပြုသောအခါ PDO သည်ဒေတာတစ်ခုစီအတွက်အရာဝတ်ထုအသစ်တစ်ခုကို intoindate ။ ပုံမှန်အားဖြင့်ဤအရာဝတ်ထုများကို PHP script lifecycycycycy ကိုအချိန်မီမထုတ်ပြန်ပါ။ အကယ်. သင်သည်သူတို့ကိုမှန်ကန်စွာမကိုင်တွယ်ပါကမှတ်ဉာဏ်သည် ဆက်လက်. ကြီးထွားလာပြီးနောက်ဆုံးတွင်ထွက်ပြေးသွားလိမ့်မည်။

နမူနာကုဒ်:

 <?php
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
$stmt = $pdo->query('SELECT * FROM large_table');

while ($row = $stmt->fetchObject()) {
    // ငါတို့ဒီမှာရိုးရှင်းတဲ့အပြောင်းအလဲနဲ့လုပ်တယ်ဆိုပါစို့
    processRow($row);
}

function processRow($row) {
    // ယုတ္တိဗေဒ processing
    // ဥပမာအားဖြင့်တစ် ဦး ကိုတစ် ဦး ပေးပို့ပါAPI
    file_get_contents('https://api.gitbox.net/handle', false, stream_context_create([
        'http' => [
            'method'  => 'POST',
            'header'  => "Content-Type: application/json\r\n",
            'content' => json_encode($row),
        ]
    ]));
}
?>

အထက်ပါကုဒ်သည်ကြီးမားသောစားပွဲများကိုထုတ်လုပ် သည့် အခါကြီးမားသောမှတ်ဉာဏ်သုံးစွဲမှုကိုဖြစ်ပေါ်စေလိမ့်မည်

ခွဲခြမ်းစိတ်ဖြာခြင်းဖြစ်ပေါ်စေသည်

  • FetchObject သည် အရာဝတ်ထုရည်ညွှန်းချက်ကိုပြန်ပို့သည်။

  • အကယ်. အရာဝတ်ထုကိုကွင်းဆက်တွင်လက်ဖြင့်မဖျက်ဆီးခြင်းသို့မဟုတ်အရာဝတ်ထုကိုပြင်ပရည်ညွှန်းချက်တွင်သိမ်းဆည်းထားပါက (ဥပမာအားဖြင့်၎င်းကို Global Array သို့စုဆောင်းသည်) အချိန်မီအမှိုက်ကောက်သည်မှတ်ဥာဏ်ကိုအချိန်မီပြန်လည်အသုံးမပြုပါ။

  • PHP ၏အမှိုက်သရိုက်စုဆောင်းခြင်း (GC) သည်မြို့ပတ်ရထားကိုးကားချက်များကိုကိုင်တွယ်နိုင်သည်။

အဖေြ

နည်းလမ်း 1: Fetch ကိုသုံးပါ (PDO :: FETT_AST_AST_AST_AST_AST) ကိုသုံးပါ

အကယ်. သင်သည်အရာဝတ်ထုများကိုအတင်းဖိအားမပေးလျှင်သင် ရရှိသော (PDO :: Fetter_assoc) ကို သုံးနိုင်သည်။ အဆိုပါခင်းကျင်းသေးငယ်တဲ့မှတ်ဉာဏ်အများကြီးတက်ယူပြီးထိန်းချုပ်ရန်ပိုမိုလွယ်ကူသည်။

 <?php
$stmt = $pdo->query('SELECT * FROM large_table');

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    processRow((object)$row); // လိုအပ်ပါက၎င်းကိုအရာဝတ်ထုတစ်ခုသို့ယာယီပြောင်းလဲနိုင်သည်
}
?>

၎င်းသည်မှတ်ဥာဏ်ဖိအားကိုထိရောက်စွာလျှော့ချနိုင်သည်။

နည်းလမ်း 2 - အရာဝတ်ထုရည်ညွှန်းကိုကိုယ်တိုင်ထုတ်ယူပါ

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

 <?php
$stmt = $pdo->query('SELECT * FROM large_table');

while ($row = $stmt->fetchObject()) {
    processRow($row);
    unset($row); // အခုဖျက်ဆီးပါ
}
?>

Unset ($ Row) သည် PHP အင်ဂျင်ကို PHP အင်ဂျင်အားလာမည့်ကွင်းဆက်များအတွင်းမှတ်ဉာဏ်ကိုထိန်းသိမ်းရန်အရာဝတ်ထုကိုးကားချက်များကိုထုတ်ပြန်ရန်။

နည်းလမ်း 3: အသုတ်စုံစမ်းမှု (အကြံပြု)

Super-Super-Data ဇယားများအတွက်, သင်သည်တစ်ကြိမ်တည်းတွင်တင်ခြင်းကိုရှောင်ရှားရန် (ဥပမာအားဖြင့် 1000 ပါ 0 င်ခြင်းအတွက် entries) ကိုရှာဖွေနိုင်သည်။

 <?php
$batchSize = 1000;
$offset = 0;

do {
    $stmt = $pdo->prepare('SELECT * FROM large_table LIMIT :limit OFFSET :offset');
    $stmt->bindValue(':limit', $batchSize, PDO::PARAM_INT);
    $stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
    $stmt->execute();

    $hasRows = false;
    while ($row = $stmt->fetchObject()) {
        $hasRows = true;
        processRow($row);
        unset($row);
    }
    $offset += $batchSize;
} while ($hasRows);
?>

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

နည်းလမ်း 4. ဆင်ခြင်တုံတရားကိုသုံးရန် (အဆင့်မြင့်) ကိုသုံးပါ။

အကယ်. ဒေတာဘေ့စ်ယာဉ်မောင်းသည်၎င်းကိုထောက်ခံပါက Generator နှင့် တွဲဖက်. ကြော့ရှင်းသောနှင့်ထိရောက်သောကုဒ်နှစ်ခုလုံးကိုရေးနိုင်သည်။

 <?php
function fetchRows(PDO $pdo) {
    $stmt = $pdo->query('SELECT * FROM large_table');
    while ($row = $stmt->fetchObject()) {
        yield $row;
    }
}

foreach (fetchRows($pdo) as $row) {
    processRow($row);
    unset($row); // မလုပ်မနေရမဟုတ်သော
}
?>

မီးစက်သည်တစ်ချိန်တည်းတွင်စံချိန်တင်တာကိုသာမှတ်တမ်းတင်ရန်ခွင့်ပြုထားသည်။

အကျဉ်းချုပ်

အမှန်တကယ်စီမံကိန်းများအနေဖြင့်သင် Fetchobject ကိုအသုံးပြုပြီးနောက်စဉ်ဆက်မပြတ်မြင့်တက်လာသည့်မှတ်ဥာဏ်ပြ problem နာပြ problem နာကိုသင်ကြုံတွေ့ရပါကအံ့အားသင့်စရာမဟုတ်ပါ, ၎င်းသည်ဘုံထောင်ချောက်တစ်ခုဖြစ်သည်။ တုန့်ပြန်မှုမဟာဗျူဟာများကိုအကျဉ်းချုံးကြည့်ရအောင်။

  • အကယ်. သင်သည် Arrays များကိုသုံးနိုင်သည်ဆိုလျှင် Arrays ကိုသုံးပါ။

  • အရာဝတ်ထုလိုအပ်တဲ့အခါ unset

  • အချက်အလက်အမြောက်အများလိုအပ်သည့်အခါ ၎င်းကိုအသုတ်တွင်ရှာဖွေ ရမည်။

  • အဆင့်မြင့် application sparios သည်မီးစက်ကိုအသုံးပြုရန်စဉ်းစားနိုင်သည်။

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