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) သည်မြို့ပတ်ရထားကိုးကားချက်များကိုကိုင်တွယ်နိုင်သည်။
အကယ်. သင်သည်အရာဝတ်ထုများကိုအတင်းဖိအားမပေးလျှင်သင် ရရှိသော (PDO :: Fetter_assoc) ကို သုံးနိုင်သည်။ အဆိုပါခင်းကျင်းသေးငယ်တဲ့မှတ်ဉာဏ်အများကြီးတက်ယူပြီးထိန်းချုပ်ရန်ပိုမိုလွယ်ကူသည်။
<?php
$stmt = $pdo->query('SELECT * FROM large_table');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
processRow((object)$row); // လိုအပ်ပါက၎င်းကိုအရာဝတ်ထုတစ်ခုသို့ယာယီပြောင်းလဲနိုင်သည်
}
?>
၎င်းသည်မှတ်ဥာဏ်ဖိအားကိုထိရောက်စွာလျှော့ချနိုင်သည်။
အကယ်. သင်သည်အရာဝတ်ထုတစ်ခုကိုသုံးရန်လိုပါကကွင်းဆက်တစ်ခုစီပြီးနောက်အရာဝတ်ထုရည်ညွှန်းချက်ကို ကိုယ်တိုင်ကိုယ်ကျထုတ်ယူ နိုင်သည်။
<?php
$stmt = $pdo->query('SELECT * FROM large_table');
while ($row = $stmt->fetchObject()) {
processRow($row);
unset($row); // အခုဖျက်ဆီးပါ
}
?>
Unset ($ Row) သည် PHP အင်ဂျင်ကို PHP အင်ဂျင်အားလာမည့်ကွင်းဆက်များအတွင်းမှတ်ဉာဏ်ကိုထိန်းသိမ်းရန်အရာဝတ်ထုကိုးကားချက်များကိုထုတ်ပြန်ရန်။
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);
?>
အသုတ်တစ်ခုတည်း၏မေးမြန်းစုံစမ်းမှုပမာဏကိုထိန်းချုပ်ခြင်းအားဖြင့်မှတ်ဉာဏ်မြင့်တက်ခြင်းကိုလုံးဝရှောင်ရှားနိုင်သည်။
အကယ်. ဒေတာဘေ့စ်ယာဉ်မောင်းသည်၎င်းကိုထောက်ခံပါက 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 သည်မီးစက်ကိုအသုံးပြုရန်စဉ်းစားနိုင်သည်။
ဤအကြံပြုချက်များကိုမှန်ကန်စွာအသုံးပြုခြင်းအားဖြင့်သင်သည်မည်သည့်အရွယ်အစားမဆိုဒေတာလုပ်ဆောင်မှုလိုအပ်ချက်များကိုအေးဆေးတည်ငြိမ်စွာကိုင်တွယ်နိုင်သည်။