ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် PHP ၏ MySQLI Extension ကိုအသုံးပြုသောအခါ နောက် function သည်ရလဒ်အစုအမျိုးမျိုးပါ 0 င်သည့်ရှာဖွေမှုများကိုပြုလုပ်ရန် (ဥပမာ, multi_query) ဟုခေါ်သည်။ သို့သော် developer များကတစ်ခါတစ်ရံလုပ်ဆောင်မှုသည် မှားယွင်းသောအရာ ဖြစ်လာသည်, ၎င်းသည်နောက်ဆက်တွဲရလဒ်ကိုမရရှိနိုင်သောရလဒ်ဖြစ်စေနိုင်သည်။ ဒါကြောင့် နောက်တစ်ခါလာမယ့် အကြောင်းရင်းတွေကဘာဖြစ်လို့ မှားယွင်းတဲ့ အကြောင်းပြချက်လဲ။ ဘယ်လိုဖြေရှင်းမလဲ
ဤဆောင်းပါးသည်ဤပြ issue နာကိုအသေးစိတ်ခွဲခြမ်းစိတ်ဖြာလိမ့်မည်။
MySQLI :: Next_Result () သည် Multi_Query () နှင့်အသုံးပြုသောနောက်ရလဒ်အစုအဝေးသို့ပြောင်းရွှေ့ရန်အသုံးပြုသောနည်းလမ်းတစ်ခုဖြစ်သည်။ များသောအားဖြင့်ကြေငြာချက်ပေါင်းစုံစုံစမ်းမှုကိုအကောင်အထည်ဖော်သည့်အခါရလဒ်တစ်ခုစီကိုတစ်ခုစီရယူရန်၎င်းကိုအသုံးပြုရန်လိုအပ်သည်။
အခြေခံအသုံးပြုမှုဥပမာများ -
$mysqli = new mysqli("localhost", "user", "password", "database");
$sql = "SELECT * FROM users; SELECT * FROM orders;";
if ($mysqli->multi_query($sql)) {
do {
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$result->free();
}
} while ($mysqli->next_result());
} else {
echo "Query Error: " . $mysqli->error;
}
အသုံးအများဆုံးအကြောင်းပြချက်မှာ ရလဒ်အားလုံးကိုဖတ်ပြီးဖြစ်သည် ။ ယခုအချိန်တွင်နောက်တစ်ကြိမ်တွင် နောက်တစ်ကြိမ် ခေါ်ဆိုခြင်း () သည် "ရလဒ်များမရှိတော့ပါ" ကိုဖော်ပြသည်။
ဖြေရှင်းချက် - ကျိုးကြောင်းဆီလျော်စွာစက်ဝန်းဝေါဟာရများအခြေအနေကိုသာထိန်းချုပ်ရုံမျှသာမရှိပါ။
multi_query () မှကွပ်မျက်ခံရသော SQL ထုတ်ပြန်ချက်များအနက်မှတစ်ခုမှာမအောင်မြင်ပါက နောက်တစ်ခါ မအောင်မြင် ပါ ။
ဥပမာ -
$sql = "SELECT * FROM valid_table; SELECT * FROM invalid_table;";
if ($mysqli->multi_query($sql)) {
do {
if ($result = $mysqli->store_result()) {
// အပြောင်းအလဲများရလဒ်များ
$result->free();
} else {
if ($mysqli->errno) {
echo "Error: " . $mysqli->error;
break;
}
}
} while ($mysqli->next_result());
}
ယခင်ရလဒ်ကို မှန်ကန်စွာ ဖြ န့ ်ချိခြင်းမပြုပါက,
အကြံပြုချက် - ဒေါ်လာရလဒ် - အခမဲ့ () သို့မဟုတ် $ mysqli-> Store_result () ကို သင်ရလဒ်မလုပ်ဆောင်လျှင်ပင်အမြဲတမ်းခေါ်ပါ။
Multi_Query () သည် ထုတ်ပြန်ချက်များစွာကိုထောက်ပံ့သော်လည်းအမျိုးအစားအားလုံး၏ပေါင်းစပ်မှုပေါင်းစပ်မှုကိုမထောက်ခံပါ။ ဥပမာအားဖြင့် DDL ထုတ်ပြန်ချက်များကိုတင်းကျပ်သော mode တွင် (ထိုကဲ့သို့သော ဖန်တီးမှုလုပ်ထုံးလုပ်နည်း ) ကိုကန့်သတ်ထားနိုင်သည်။
အကြံပြုချက် - ဖော်ပြချက်များအားလုံးသည်တရားဝင်ဖြစ်ကြောင်းသေချာပါစေ။ လိုအပ်ပါက MySQLI-> အမှားကို အသုံးပြုပါ။
အမှားအားလုံးကို romirt ကို enable လုပ်ရန် error_reporting (e_All) ကို သုံးပါ။
$ MySQLI-> ERRNO နှင့် ERRNO နှင့် MYSQLI-> အမှားအယွင်းများအတွက်အမှားအယွင်းများအတွက်အမှားအယွင်းများကို စစ်ဆေးပါ။
Logging: လာမယ့် troubleshooting အတွက် log to log _Result Value နှင့်အမှား output ကိုရေးပါ။
ရလဒ်အ စု တခုရှိမရှိ,
if ($mysqli->more_results()) {
$mysqli->next_result();
}
$mysqli = new mysqli("localhost", "user", "password", "database");
$sql = "SELECT * FROM users; SELECT * FROM orders WHERE order_date > '2024-01-01'";
if ($mysqli->multi_query($sql)) {
do {
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_assoc()) {
echo "အချက်များ: " . implode(", ", $row) . "<br>";
}
$result->free();
} else {
if ($mysqli->errno) {
echo "အမှား: " . $mysqli->error . "<br>";
}
}
} while ($mysqli->more_results() && $mysqli->next_result());
} else {
echo "ကန ဦး စုံစမ်းမှုမအောင်မြင်ပါ:" . $mysqli->error;
}