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