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

PDostatement :: Query ထိရောက်မှုကိုတိုးတက်စေရန် PDostatement :: Fetchall နှင့်မည်သို့အသုံးပြုရမည်နည်း

gitbox 2025-05-28

ဒေတာဘေ့စ်ဖွံ့ဖြိုးတိုးတက်ရေးအတွက် PHP အတွက် PHP ကိုအသုံးပြုသောအခါ PDO (PHP Data Oblatchs) သည်လူကြိုက်များသောဒေတာဘေ့စ် 0 င်ရောက်မှုနည်းလမ်းဖြစ်သည်။ ဤဆောင်းပါးသည် PDostatement :: fetterall နှင့် pdostatements :: fetterall နှင့် pdostatements :: rowcount နှင့် pdostatements :: rowcount နှင့် pdostatements :: Rowcount နှင့် PDostatement :: Regrocount တွင်မည်သို့အသုံးပြုရမည်ကိုလေ့လာပါ။

1 ။ Fetchall နှင့် Rowcount ကို နားလည်ပါ

PDO ကို အသုံးပြု. မေးမြန်းချက်များကိုရွေးချယ်သည့်အခါကျွန်ုပ်တို့သည်ရလဒ်အတန်းများအားလုံးရရှိရန်အတွက် fchlidall ကို အသုံးပြုလေ့ရှိသည်။ ၎င်းသည်ရှာဖွေမှုရလဒ်များကိုရှာဖွေရန်လွယ်ကူသည့် query ကိုပြန်လည်ရယူရန်အတွက်အလွန်တိုက်ရိုက်နည်းလမ်းဖြစ်သည်။

 $stmt = $pdo->query("SELECT * FROM users");
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

အခြားတစ်ဖက်တွင်မူ Rowcount သည်ယခင် SQL ထုတ်ပြန်ကြေငြာချက်အရထိခိုက်သောအတန်းအရေအတွက်ကိုပြန်ပို့ရန်ဖြစ်သည်။ Select လုပ်ခြင်း ဖော်ပြချက်များကိုလုပ်ဆောင်သည့်အခါ RORCOUTC အပြုအမူသည်ဒေတာဘေ့စ်ယာဉ်မောင်းပေါ်တွင်မူတည်သည်။ အချို့သောယာဉ်မောင်းများ (ဥပမာ MySQL's PDO_MYSQL ကဲ့သို့သော) တွင် select query လုပ်ရန် Rowcount ကိုခေါ်ဆိုခြင်းသည်အတန်းအရေအတွက်အတိအကျကိုအမြဲမပြန်ပါ။

 $count = $stmt->rowCount();

2 ဘုံနားလည်မှုလွဲမှားခြင်းများ

ရှာဖွေမှုရလဒ်သည်ဗလာကျသည်ကိုဆုံးဖြတ်သောအခါများစွာသော developer များစွာသည်ဤကဲ့သို့သောကုဒ်ကိုရေးလေ့ရှိသည် -

 $stmt = $pdo->query("SELECT * FROM users WHERE status = 'active'");
if ($stmt->rowCount() > 0) {
    $users = $stmt->fetchAll(PDO::FETCH_ASSOC);
}

ဤချဉ်းကပ်မှုသည်အချို့သောဒေတာဘေ့စ်ယာဉ်မောင်း (အထူးသဖြင့် MySQL) အောက်တွင်မျှော်လင့်ထားသည့်ရလဒ်များကိုမပြန်ပါ။ အကြောင်းပြချက်မှာ - ရွေးချယ်မှုဖော်ပြချက်များအတွက် PDO ၏ Rowcount သည်ရလဒ်ကိုအမှန်တကယ်ဗလာမဟုတ်သော်ငြားလည်းအချို့သောယာဉ်မောင်းများ၌ "0" ကိုပြန်ယူသည်။

3 ။ အကြံပြုထားသည့်အလေ့အကျင့်များ - Fetchall ကို ဦး စွာသုံးပါ, ထို့နောက်အရေအတွက်ကိုဆုံးဖြတ်ပါ

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

 $stmt = $pdo->prepare("SELECT * FROM users WHERE status = :status");
$stmt->execute(['status' => 'active']);
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);

if (count($users) > 0) {
    // ဒေတာရှိသည်,ယုတ္တိဗေဒ processing
} else {
    // အဘယ်သူမျှမဒေတာသတိပေးချက်မရှိပါ
}

ဤချဉ်းကပ်မှု၏ကောင်းကျိုးများမှာ -

  • ကွဲပြားခြားနားသောယာဉ်မောင်းများအောက်တွင်မကိုက်ညီသော Rowcount ၏ပြ problem နာကိုရှောင်ကြဉ်ပါ။

  • Fetchall ကွပ်မျက်ခံရပြီးတဲ့နောက်ဒေတာတွေကိုမှတ်ဉာဏ်ထဲထည့်ပြီး ရေတွက် ($ users) overhead ဟာအလွန်သေးငယ်တယ်။

  • ပိုပြီးဖတ်နိုင်စွမ်းနှင့်ပိုမိုရှင်းလင်းရေးယုတ္တိဗေဒ။

4 ။ ထိရောက်မှုတိုးတက်စေရန်လက်တွေ့ကျွမ်းကျင်မှု

Fetchall အဆင်ပြေနေစဉ်တွင်အချက်အလက်အမြောက်အများကိုပြုပြင်သည့်အခါ၎င်းသည်မှတ်ဥာဏ်များစွာကိုလောင်ကျွမ်းစေသည်။ အောက်ပါနည်းဗျူဟာများကိုဤအချိန်တွင်ထည့်သွင်းစဉ်းစားနိုင်သည်။

1 ။ fetchall အစား fetch ကွင်းဆက်ကိုသုံးပါ

 $stmt = $pdo->prepare("SELECT * FROM logs WHERE created_at > :date");
$stmt->execute(['date' => '2025-01-01']);

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    // အချက်အလက်များ၏အတန်းတစ်ခုချင်းစီကိုအချိန်နှင့်တပြေးညီပြုလုပ်ပါ
}

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

2 ။ ကန့်သတ်ချက်ကိုကန့်သတ်ချက်ကိုကန့်သတ်ထားသည်

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

 $stmt = $pdo->prepare("SELECT * FROM users WHERE status = :status LIMIT 100");
$stmt->execute(['status' => 'active']);
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);

3 ။ အရေအတွက် (*) ဒေတာတည်ရှိမှုရှိမရှိလျင်မြန်စွာဆုံးဖြတ်ရန်

အချက်အလက်များရှိလျှင်သင်သိလိုပါကရလဒ်ကိုအမှန်တကယ်ရရန်မလိုအပ်ပါကသင် Select Count (*) ကို သုံးနိုင်သည်။

 $stmt = $pdo->prepare("SELECT COUNT(*) FROM users WHERE status = :status");
$stmt->execute(['status' => 'active']);
$count = $stmt->fetchColumn();

if ($count > 0) {
    // ကိုက်ညီတဲ့ဒေတာရှိပါတယ်
}

5 ။ လက်တွေ့ကျသော application တစ်ခု၏ဥပမာများ

gitbox.net ၏နောက်ခံစနစ်ရှိ activated အသုံးပြုသူများအားလုံးကိုစာရင်းပြုစုရန်လိုအပ်သည်ဆိုပါစို့။

 $url = 'https://gitbox.net/api/active-users';

$stmt = $pdo->prepare("SELECT id, username, email FROM users WHERE status = :status ORDER BY created_at DESC LIMIT 50");
$stmt->execute(['status' => 'active']);
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);

if (count($users) > 0) {
    foreach ($users as $user) {
        echo "အသုံးပြုသူ:{$user['username']},စာပို့:{$user['email']}<br>";
    }
} else {
    echo "အဘယ်သူမျှမ activated အသုံးပြုသူရှာမတွေ့ပါ。";
}

6 ။ အကျဉ်းချုပ်

  • Select မေးမြန်းချက်များရှိရလဒ်အတန်းများကိုအကဲဖြတ်ရန် Rowcount ကိုမှီခိုခြင်းမပြုပါနှင့်။

  • ဒေတာများတည်ရှိမရှိ, ရှိမရှိဆုံးဖြတ်ရန် Fetchall Plus အရေအတွက်ကို အသုံးပြုရန်အကြံပြုသည်။

  • ကြီးမားသောဒေတာမေးမြန်းချက်များအနေဖြင့် fetch iser နှင့် limit ကို အသုံးပြုခြင်းကိုအသုံးပြုခြင်းသည်အဓိက optimization နည်းလမ်းများဖြစ်သည်။

  • အကယ်. သင်သည်အတန်းအရေအတွက်ကိုရေတွက်ရန်သာလိုအပ်ပါကထိရောက်မှုကိုတိုးတက်စေရန် Select Count (*) ကို သုံးနိုင်သည်။

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