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

pdostatement သုံးသည့်အခါမှားယွင်းသောရလဒ်များကိုကြည့်ရှုရန်မည်သို့ရှောင်ရှားရမည်နည်း :: Rowcount

gitbox 2025-05-28

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

ဤဆောင်းပါးသည် Rowcount () သည်တစ်ခါတစ်ရံကျွန်ုပ်တို့မျှော်လင့်ထားသည့်အတိုင်းမမျှော်လင့်သောကြောင့်တစ်ခါတစ်ရံတွင်မမျှော်လင့်သောကြောင့်မဟုတ်ဘဲတစ်ခါတစ်ရံတွင်မဟုတ်ဘဲမကြာခဏဆိုသလိုတူးဖော်ခြင်းနှင့်၎င်းကိုကိုင်တွယ်ရန်မှန်ကန်သောနည်းလမ်းကိုပေးသည်။

1 ။ Rowcount ၏ပုံမှန်အသုံးပြုမှု

 $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'password');
$stmt = $pdo->prepare("DELETE FROM users WHERE id = :id");
$stmt->execute([':id' => 123]);

echo $stmt->rowCount(); // ဖျက်ပစ်လိုင်းများ၏ output ကို output

ဤကုဒ်တွင်မှတ်တမ်းများကိုဖျက်လိုက်ပြီး RORCOUT မှတစ်ဆင့်မှတ်တမ်းများကိုသက်ရောက်စေမည့် RORCOUT () ကိုသိရန်မျှော်လင့်ပါသည်။ ဤသည်များသောအားဖြင့် delete နှင့် update ထုတ်ပြန်ချက်များအတွက်ဒဏ်ငွေအလုပ်လုပ်သည်။ သို့သော်ဖော်ပြချက်များသို့မဟုတ်အထူးအခြေအနေများပါ 0 င်သည် ကိုရွေးချယ်ပါ ကပြ the နာပေါ်ပေါက်လာသည်။

2 ။ အဘယ်ကြောင့် Rowcount တစ်ခါတစ်ရံစိတ်မချရ?

1 ။ Selected ထုတ်ပြန်ချက်များ, အပြုအမူမှီခိုယာဉ်မောင်း

Postgresql ကဲ့သို့သောဒေတာဘေ့စ်အချို့၏ databases အချို့၏ Selection () ကို Select လုပ်ခြင်း , Rowcount () ကိုခေါ်ယူပြီးနောက် Rowcount () ကိုခေါ်ယူခြင်းသည်များသောအားဖြင့် 0 င် 0 င် 0 င်သို့ပြန်လည်ရောက်ရှိလိမ့်မည် ။ အကြောင်းပြချက်မှာ PDO သည် MySQL_ATTR_USTRAUSE_USTRAUSE_USURED_QUERY_QUERY ကို MYSQL တွင်အသုံးပြုသည်။ အတန်းများကိုနှောင့်နှေးခြင်းများကိုနှောင့်နှေးစေပြီး Rowcount သည်အတန်းအရေအတွက်ကိုတိကျစွာမသိနိုင်ပါ။

 $stmt = $pdo->query("SELECT * FROM users");
echo $stmt->rowCount(); // တည်နေ MySQL ဖြစ်နိုင်သော output ကို 0

2 ။ update ကိုသို့မဟုတ်ဖျက်ပစ်သည့်အခါမွမ်းမံခြင်းသို့မဟုတ်ဖျက်ခြင်းသည်အချက်အလက်အပြောင်းအလဲများမရှိပါ

ကြေညာချက်ကိုတရားဝင်ကွပ်မျက်ခံရရင်တောင်, ဒေတာဘေ့စ်ထဲမှာအမှန်တကယ်ပြောင်းလဲမှုမရှိဘူးလို့ဆိုရင်တောင် Regrocount () ကို 0 ယျတယ်။ ဥပမာ -

 $stmt = $pdo->prepare("UPDATE users SET name = :name WHERE id = :id");
$stmt->execute([':name' => 'Alice', ':id' => 123]);
echo $stmt->rowCount(); // လှျင် name ပြီးပြီ Alice,ထို့နောက်ပြန်လာပါ 0

၎င်းသည်အမှားတစ်ခုမဟုတ်ပါ, သို့သော် SQL ၏အင်္ဂါရပ်တစ်မျိုး - အမှန်တကယ်ပြောင်းလဲမှုများမရှိပါက၎င်းသည် "သွဇာလွှမ်းမိုးမှုကိုသွဇာလွှမ်းမိုးမှု" ဟုမရေတွက်ပါ။

3 ။ ယာဉ်မောင်းလိုက်ဖက်တဲ့ပြ issues နာများ

ကွဲပြားခြားနားသောဒေတာဘေ့စ်ယာဉ်မောင်းအကောင်အထည်ဖော်မှု Support Rowcount () မကိုက်ညီပါ။ ဥပမာအားဖြင့်:

  • MySQL: Select ကိုရွေးချယ်ခြင်းသည် မှန်ကန်သောတန်ဖိုးကိုမပြန်ပါ, Update / Delete က ထောက်ခံသည်။

  • Postgresql: အများဆုံးထုတ်ပြန်ချက်များက၎င်းကိုထောက်ခံသည်။

  • Sqlite: ထုတ်ပြန်ချက်များအများစုက၎င်းကိုထောက်ပံ့သည်။

  • Oracle: အပြုအမူကပိုပြီးရှုပ်ထွေးပြီးသင်သတိနဲ့သုံးဖို့လိုတယ်။

3 ။ အတန်းအရေအတွက်ကိုဘယ်လိုမှန်မှန်ကန်ကန်ရနိုင်မလဲ။

1 ။ Selected queries များအတွက်, fetchall () သို့မဟုတ် travers စာရင်းဇယားများကိုသုံးပါ

 $stmt = $pdo->query("SELECT * FROM users WHERE status = 'active'");
$rows = $stmt->fetchAll();
echo count($rows);

သို့မဟုတ် traversal ကိုသုံးပါ:

 $count = 0;
foreach ($stmt as $row) {
    $count++;
}
echo $count;

2 ။ မွမ်းမံမှုတစ်ခုရှိမရှိသင်သိလိုပါကသင်သည်ခြွင်းချက်ဆိုင်ရာကြေငြာချက်ကိုကိုယ်တိုင်နှိုင်းယှဉ်နိုင်သည်။

 $stmt = $pdo->prepare("UPDATE users SET name = :name WHERE id = :id AND name != :name");
$stmt->execute([':name' => 'Alice', ':id' => 123]);
echo $stmt->rowCount(); // မှသာ name အမှန်တကယ်ပြောင်းလဲမှုသို့ပြန်သွားပါ 1

3 ။ SQL ကြေငြာချက်ကို အသုံးပြု. ရေတွက်ပါ (အကြံပြုထားသောနည်းလမ်း)

များစွာသောကိစ္စရပ်များတွင်အထူးသဖြင့်မေးမြန်းခြင်းများသို့မဟုတ်အသုတ်ခြင်းလုပ်ငန်းများ၌ SQL သည်တိုက်ရိုက်သက်ရောက်သောအတန်းအရေအတွက်ကိုပြန်ပို့ရန် သာ. ကောင်းသည်။

 $stmt = $pdo->query("SELECT COUNT(*) FROM users WHERE status = 'active'");
$count = $stmt->fetchColumn();
echo $count;

4 ။ သင်၏ဒေတာဘေ့စ်ယာဉ်မောင်းကိုနားလည်ပြီးစမ်းသပ်ပါ

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

 $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'password', [
    PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true
]);

4 ။ နိဂုံးချုပ်

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

အလုံခြုံဆုံးမဟာဗျူဟာသည် -

  • Select မေးမြန်းချက်များတွင် RORCOUT () ကိုမှီခိုခြင်းကိုရှောင်ကြဉ်ပါ။

  • အသစ်ပြောင်းခြင်း / ဖျက်ခြင်း ကဲ့သို့သောစစ်ဆင်ရေးအတွက် "သက်ရောက်မှုရှိသောအတန်းများ" သည် "အတန်းများကိုရှာဖွေခြင်း" မဟုတ်ကြောင်းနားလည်သဘောပေါက်သည်။

  • တိကျသောထိန်းချုပ်မှုသို့မဟုတ် Cross-database လိုက်ဖက်မှုအတွက် SQL-Level ရေတွက်ခြင်းဆိုင်ရာယုတ္တိဗေဒကိုအသုံးပြုရန်စဉ်းစားပါ။

ဆက်စပ်အကြောင်းအရာ