လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Num_rows 0 ဘာတွေပြန်လာရတာလဲ။ ဘုံနားလည်မှုလွဲမှားခြင်း၏ခွဲခြမ်းစိတ်ဖြာခြင်း

Num_rows 0 ဘာတွေပြန်လာရတာလဲ။ ဘုံနားလည်မှုလွဲမှားခြင်း၏ခွဲခြမ်းစိတ်ဖြာခြင်း

M66 2025-05-31

PHP တွင် MySQLI extensions များကို အသုံးပြု. ဒေတာဘေ့စ်များကိုရှာဖွေသောအခါ developer များစွာသည်ရှုပ်ထွေးသောမေးခွန်းတစ်ခုကိုကြုံတွေ့ရလိမ့်မည်။ ဤဆောင်းပါးသည်သင့်အားဘုံနားလည်မှုလွဲမှားခြင်းများကိုခွဲခြားရန်နှင့်ပြ problem နာ၏အကြောင်းရင်းကိုရှာဖွေရန်ကူညီပေးရန်ကူညီလိမ့်မည်။

နားလည်မှုလွဲခြင်း 1 - MySQLI_Multi_Query ကို အသုံးပြုခဲ့သည်

MySQLI_Multi_Query သည် SQL ထုတ်ပြန်ချက်များကိုတစ်ပြိုင်နက်တည်းလုပ်ဆောင်နိုင်သည့်နည်းလမ်းတစ်ခု ဖြစ်သည် ။ သို့သော်၎င်းသည် boolean value ကိုပြန်လည်ရရှိနိုင်ပါသည်

နမူနာကုဒ်:

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

$sql = "SELECT * FROM users; SELECT * FROM products;";
if ($mysqli->multi_query($sql)) {
    do {
        if ($result = $mysqli->store_result()) {
            echo "လက်ရှိရလဒ် row tros ရေတွက်: " . $result->num_rows . "<br>";
            $result->free();
        }
    } while ($mysqli->more_results() && $mysqli->next_result());
}
?>

အကယ်. သင်သည် Multi_query Return Value နှင့် Numrowrows ကို ဖုန်းခေါ်ရန်ကြိုးစားပါကသင် 0 ကိုရလိမ့်မည်။ ရလဒ်ကိုရရှိသောအရာဝတ်ထုကိုမှန်ကန်စွာရရှိမည်သေချာပါစေ။

နားလည်မှုလွဲခြင်း 2: စုံစမ်းမှုကိုအကောင်အထည်ဖော်ရန်မေ့လျော့

အချို့ developer တချို့က $ stmt = $ MySQLI-> ပြင်ဆင် (... ) ကိုသုံးပြီး, ဒေါ်လာ stmt-> numrows ကို တိုက်ရိုက်အသုံးပြုသည်။ ပြင်ဆင်ရန် ပြင်ဆင်ခြင်း သည်ပြင်ဆင်ခြင်းမဟုတ်ပါ။

စုံစမ်းမှုကိုပထမ ဦး ဆုံးကွပ်မျက်ခံရမည်ဖြစ်ပြီးရလဒ်ကိုရရှိမည်ဖြစ်သည်။

 <?php
$stmt = $mysqli->prepare("SELECT * FROM users WHERE age > ?");
$stmt->bind_param("i", $age);
$age = 18;
$stmt->execute();
$result = $stmt->get_result();
echo "အတန်းအရေအတွက်: " . $result->num_rows;
?>

အကယ်. သင်သည် execute သို့မဟုတ် get_result skip_result skip လုပ်ပါက Num_rows သည် ပြောဆိုရန်နည်းလမ်းမရှိပါ။

နားလည်မှုလွဲခြင်း 3: unbuffered စုံစမ်းမှုကိုအသုံးပြုခဲ့သည်

ပုံမှန်အားဖြင့် MySQLI သည် buffered မေးမြန်းချက်များကိုအသုံးပြုသည်။ Num_Rows များကို တိုက်ရိုက်အသုံးပြုနိုင်သည်။ သို့သော် MySQLI_UCE_RESALT MODE ကိုအသုံးပြုပါကရလဒ်မှာ streaming လုပ်သည်။ MySQL သည်မဖြတ်ခင်အတန်းအရေအတွက်ကိုမတွက်နိုင်ပါ။

ဥပမာ -

 <?php
$result = $mysqli->query("SELECT * FROM users", MYSQLI_USE_RESULT);
echo $result->num_rows; // အမှား:此时无法获取အတန်းအရေအတွက်

ဖြေရှင်းနည်းမှာ default buffering mode ကိုအသုံးပြုရန်သို့မဟုတ်စာရင်းအင်းများမှတစ်ဆင့် Iteeer ကိုသုံးရန်ဖြစ်သည်။

နားလည်မှုလွဲခြင်း 4: Num_row ၏အဓိပ္ပာယ်ကိုနားလည်မှုလွဲခြင်း

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

 <?php
$mysqli->query("UPDATE users SET status = 'active' WHERE last_login > NOW() - INTERVAL 30 DAY");
echo "受影响的အတန်းအရေအတွက်: " . $mysqli->affected_rows;
?>

သတိရ: ရွေးချယ်မှုစုံစမ်းမှုမှထုတ်လုပ်သောရလဒ်ကိုသာ num_rows ရှိသည်။

အကျဉ်းချုပ်

အကယ်. Num_rows ကို သင်ကြုံတွေ့ရပါက 0 ကိုအမြဲတမ်းပြန်ရောက်သည်။

? သင် multi_query ကို သုံးခဲ့ကြသော်လည်းရလဒ်ကိုမရရှိနိုင်ပါသလော။
? သင် ပြင်ဆင် ပြီးနောက် execute နှင့် get_result ကို execute ရန် မေ့လျော့?
? သင် unbuffered mode ကိုသုံးခဲ့သလား
? သင် query ကိုမှားခဲ့သလား

ဤနားလည်မှုလွဲမှားခြင်းများကိုရှောင်ရှားခြင်းအားဖြင့်သင်သည် mysqli_result နှင့် numrowrow ကို မှန်ကန်စွာအသုံးပြုနိုင်ပြီးလမ်းလွှဲများကိုရှောင်ရှားနိုင်သည်။