လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> pdostatement သုံး. ပေါင်းစည်းထားသောမေးမြန်းချက်တစ်ခု၏ရလဒ်ကိုမည်သို့ရနိုင်မည်နည်း :: Rowcount

pdostatement သုံး. ပေါင်းစည်းထားသောမေးမြန်းချက်တစ်ခု၏ရလဒ်ကိုမည်သို့ရနိုင်မည်နည်း :: Rowcount

gitbox 2025-05-28

PHP ဖွံ့ဖြိုးတိုးတက်မှုတွင်ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် PDO ကိုအသုံးပြုခြင်းသည်အကြံပြုထားသောနည်းလမ်းများတစ်ခုဖြစ်သည်။ PDostatement :: Rowcount () သည်ယခင် SQL ကြေငြာချက်ကြောင့်သက်ရောက်မှုရှိသောအတန်းအရေအတွက်ကိုပြန်ပို့ရန် PDO မှပေးသောနည်းလမ်းဖြစ်သည်။ သို့သော်၎င်း၏အပြုအမူသည်ကွဲပြားခြားနားသော SQL ကြေငြာ ချက် အမျိုးအစားများအ ကြား ကွဲပြားခြားနားသော SQL ကြေ ငြာ ချက်အမျိုးအစားများအနည်းငယ်ကွာခြားသည်

ဤဆောင်းပါးသည် PDostatement ၏အခြေခံအသုံးပြုမှုကိုမိတ်ဆက်ပေးလိမ့်မည်။ rowcount () ကို မိတ်ဆက်ပေးပြီး ပြည်ထောင်စု စုံစမ်းမှုရလဒ်များအရအဆင့်မြှင့်မှုရလဒ်များကိုမှန်ကန်စွာရေတွက်သည့်အခါအတိမ်အနက်ကိုစူးစမ်းလေ့လာပါမည်။

1 ။ PDostatement ၏အခြေခံအသုံးပြုမှု :: Rowcount ()

Delete Delete ကို ဖျက်ခြင်း, ထည့်သွင်းခြင်း သို့မဟုတ် update လုပ်သည့် အခါ rowcount () သည် အကျိုးသက်ရောက်မှုရှိသောအတန်းအရေအတွက်ကိုပြန်ပို့နိုင်သည်။ ဥပမာများမှာအောက်ပါအတိုင်းဖြစ်သည် -

 <?php
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'pass');
$stmt = $pdo->prepare("UPDATE users SET status = 'active' WHERE last_login > NOW() - INTERVAL 30 DAY");
$stmt->execute();

echo "အသစ်ပြောင်းထားသော " . $stmt->rowCount() . " လိုင်းမှတ်တမ်းများ。";
?>

အထက်ပါကုဒ်တွင် RORCOUT () သည် update လုပ်ထားသောအတန်းအရေအတွက်ကိုပြန်ပို့သည်။

သို့သော် Select query တစ်ခုကိုကွပ်မျက်သည့်အခါ RORCOUT () သည် မျှော်လင့်ထားသည့်အတိုင်းအမြဲတမ်းအလုပ်လုပ်သည်မဟုတ်။ ဒေတာဘေ့စ်အများစု (အထူးသဖြင့် MySQL) အတွက် Default PDO :: MySQL_ATTR_UATE_UCUSE_UCUSED_Query usy_Query_Query setting, Rowcount () သည် ရလဒ်အတန်းအရေအတွက်ကိုမပြန်ပါ။

2 ။ မှန်ကန်စွာရွေးချယ်ခြင်းအတွက်ရလဒ်အတန်းအရေအတွက်ကိုရယူပါ

အကယ်. သင်သည် Select search query ကိုအသုံးပြုနေပါကရလဒ်အနေဖြင့်အတန်းအရေအတွက်ကိုရလိုပါကအကြံပြုထားသောနည်းလမ်းမှာရလဒ်အားလုံးကိုရယူရန်နှင့် count () မှတဆင့်တွက်ချက်ရန်ဖြစ်သည်။

 <?php
$stmt = $pdo->query("SELECT * FROM articles WHERE category = 'php'");
$results = $stmt->fetchAll();

echo "စုစုပေါင်းရှိပါတယ် " . count($results) . " စံချိန်。";
?>

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

ရွေးကောက်ပွဲနှစ်ခုသို့မဟုတ်နှစ်ခုထက်ပိုသော ရွေးချယ်မှု ရလဒ်များကိုပေါင်းစည်းရန်အတွက် ပြည်ထောင်စုသည် SQL တွင် syntax ဖြစ်သည်။ ပုံမှန်အားဖြင့်၎င်းသည်မိတ္တူပွားများကိုဖယ်ရှားသည် (အကယ်. သင်သည်အတန်းများကိုထပ်တူထပ်မျှထားလိုပါက ပြည်ထောင်စုအားလုံး အသုံးပြုသည်) ကိုဖယ်ရှားပေးသည်။ ထို့ကြောင့် ပြည်ထောင်စု စုံစမ်းရေးအတန်း၏အရေအတွက်ကိုဘယ်လိုရနိုင်မလဲ။

အမှားသရုပ်ပြ

 <?php
$stmt = $pdo->query("SELECT name FROM authors UNION SELECT name FROM editors");
echo $stmt->rowCount(); // အများဆုံး၌တည်၏ MySQL အမှု၌ပြန်လာလိမ့်မည် 0
?>

MySQL ရှိ Select query အတွက် Rowcount () Rowcount () သည်ပြန်လာသောရလဒ်အတန်းကိုမထောက်ပံ့သောကြောင့်ဖြစ်သည်။

မှန်ကန်သောလမ်း: Fetchall + အရေအတွက်

 <?php
$stmt = $pdo->query("
    SELECT name FROM authors
    UNION
    SELECT name FROM editors
");

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "合并查询后စုစုပေါင်းရှိပါတယ် " . count($rows) . " စံချိန်。";
?>

ဤနည်းလမ်းသည်ရလဒ်အားလုံးကို fetchall () မှတ ဆင့်ရလဒ်များရရှိပြီး, ၎င်းသည် ပြည်ထောင်စု စုံစမ်းမှု၏ရလဒ်များကိုမှန်ကန်စွာရယူနိုင်ရုံသာမကအခြားရှုပ်ထွေးသော ရွေးချယ်ထားသော မေးမြန်းချက်များနှင့်လည်းသင့်တော်သည်။

4. ပြည်ထောင်စုအားလုံးသုံးသည့်အခါအတန်းအရေအတွက်ကိုရယူပါ

ပြည်ထောင်စုကို သုံးသောအခါ (Depuploplication မရှိပါ) ကိုသင်အသုံးပြုသောအခါမှတ်တမ်းများအားလုံးရရန်တူညီသောနည်းလမ်းကိုသုံးနိုင်သည်။

 <?php
$stmt = $pdo->query("
    SELECT name FROM authors
    UNION ALL
    SELECT name FROM editors
");

$rows = $stmt->fetchAll();
echo "UNION ALL စုံစမ်းမှုရလဒ်အတွက်အတန်းအရေအတွက်ဖြစ်ပါတယ်:" . count($rows);
?>

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

အကယ် . သင်၏ ပြည်ထောင်စု စုံစမ်းမှုရလဒ်များသည်များစွာသောဖြစ်ကောင်းဖြစ်လျှင် Paged ကို paged ပြုလုပ်ရန်လိုအပ်ပါက,

 <?php
$page = 1;
$limit = 10;
$offset = ($page - 1) * $limit;

$sql = "
    SELECT * FROM (
        SELECT name FROM authors
        UNION
        SELECT name FROM editors
    ) AS combined
    LIMIT :limit OFFSET :offset
";

$stmt = $pdo->prepare($sql);
$stmt->bindValue(':limit', $limit, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();

$results = $stmt->fetchAll();
foreach ($results as $row) {
    echo $row['name'] . "<br>";
}
?>

အကျဉ်းချုပ်

  • PDostatement :: Rowcount () သည် များသောအားဖြင့် ရွေးချယ်ထားသော ဖော်ပြချက်များအတွက်မှန်ကန်သောရလဒ်များကိုမပြန်ပါ (အထူးသဖြင့် MySQL တွင်) ။

  • Fetchall () + အရေအတွက် () () () () () () () () () သည်စုံစမ်းမှုအတန်းအရေအတွက်ကိုရရှိရန်ယေဘုယျနှင့်ယုံကြည်စိတ်ချရသောနည်းတစ်ခုဖြစ်သည်။

  • သမဂ္ဂ သို့မဟုတ် ပြည်ထောင်စုစုံစမ်းရေးအတွက်မေးမြန်းမှုအားလုံး အနေဖြင့်ရီးရဲလ်အရေအတွက်ရရန် Array အရှည်ကိုရေတွက်ရန် Fetchall () ကို အသုံးပြုရန်အကြံပြုသည်။

  • အကယ်. သင်သည်ပေါင်းစည်းမှုရှာဖွေခြင်းကို paging လုပ်ရန်လိုအပ်ပါက ပြည်ထောင်စု ရလဒ်ကို subquery အဖြစ်လုပ်ဆောင်နိုင်သည်။

ဤဆောင်းပါးသည်သင့်အား Rowcount ၏အသုံးပြုမှုမြင်ကွင်းကိုနားလည်ရန်ကူညီနိုင်လိမ့်မည်ဟုကျွန်ုပ်မျှော်လင့်ပါသည် အကယ်. သင်သည် API သို့မဟုတ် data analytics ပလက်ဖောင်းတစ်ခုတည်ဆောက်နေပါကဤအကြံပြုချက်များသည် ( GitBox.net ရှိစီမံကိန်းတစ်ခုတွင်) တည်ဆောက်ပါကအထူးအရေးကြီးသည်။

သင့်အတွက် paging wrapper function ကိုရေးရန်ကျွန်ုပ်ကိုလိုအပ်ပါသလား။