Developer များသည် DataBase Operations အတွက် PHP အတွက် PHP အတွက် PHP အတွက် PHP ကိုအသုံးပြုသောအခါ php ကိုအသုံးပြုသောအခါနောက် function ကိုအသုံးပြုကြသည်။ သို့သော်ကွင်းဆက်တွင်မလျော်ကန်စွာအသုံးပြုခဲ့လျှင်၎င်းသည် script ကိုပုံမှန်အဆုံးသတ်ရန်ပျက်ကွက်စေနိုင်သည်။ ဤဆောင်းပါးသည်ဤအဖြစ်အပျက်ကိုအသေးစိတ်လေ့လာပြီးယုံကြည်စိတ်ချရသောဖြေရှင်းနည်းပေးလိမ့်မည်။
SQL ထုတ်ပြန်ချက်များကို execute လုပ်ရန် Multi_query ကိုအသုံးပြုသောကုဒ်အပိုင်းအစတစ်ခုရှိသည်ဆိုပါစို့။
$mysqli = new mysqli("localhost", "user", "password", "database");
$sql = "
SELECT * FROM users;
SELECT * FROM orders;
SELECT * FROM products;
";
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());
}
ဒီကုဒ်မှာ Sequence ကို sequence ကို sequence လုပ်ပြီးလုပ်ငန်းစဉ်အတွက် Select လုပ်ထားတဲ့ဖော်ပြချက်သုံးခုကို execute လုပ်ချင်တယ်။ Next_result () ၏ရည်ရွယ်ချက်မှာနောက်ရလဒ်ကိုပြင်ဆင်ရန်ဖြစ်သည်။
ပြ problem နာကတော့ နောက် လာမည့်လာမည့် _result () ဟုခေါ်သော အချိန်သည် မှန်ကန် ပါ က ,
Next_result () ၏ရည်ရွယ်ချက်မှာ MySqli ကိုနောက်ရလဒ်အဖြစ်ပြောင်းရွှေ့ရန်နှင့် Boolean ကိုပြန်လာရန်ဖြစ်သည်။
စစ်မှန်သော နည်းလမ်းများသည်ရလဒ်ပိုမိုအစုံသို့မဟုတ်အောင်မြင်သော switch တစ်ခုရှိသည်။
မှားယွင်းသော နည်းလမ်းများပြန်ပို့ခြင်းနည်းလမ်းများမရှိတော့ပါ။
သို့သော်နောက်ဆုံးရလဒ်မှာ အချည်းနှီးသောရလဒ် အနေဖြင့် ( နောက်ဆုံး ကြေညာချက်ကဲ့သို့) အ ချည်း နှီး ဖြစ်သော်လည်းမစုံစမ်းပါ။ သို့မဟုတ်အသစ် သော စုံစမ်းမှု ဆိုင်ရာ မဟုတ်သောကြေညာချက်သည် မှားယွင်းစွာ ပြန်လည်မွမ်းမံခြင်း ,
သင်လုပ်ဆောင်နိုင်သည့်ရလဒ်အ စု တခုရှိသေးရှိ,
$mysqli = new mysqli("localhost", "user", "password", "database");
$sql = "
SELECT * FROM users;
SELECT * FROM orders;
UPDATE users SET status = 'active' WHERE id = 1;
";
if ($mysqli->multi_query($sql)) {
do {
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$result->free();
} else {
// ရလဒ်မသတ်မှတ်,ဖြစ်နိုင်စရာ UPDATE、INSERT စောင့်
if ($mysqli->errno) {
echo "MySQL အမှား:" . $mysqli->error;
}
}
} while ($mysqli->more_results() && $mysqli->next_result());
}
ရလဒ်အစုံအရေအတွက်ကိုအပြည့်အဝမဆုံးဖြတ်နိုင်ပါကအသေကောင်များကိုကာကွယ်ရန်အတွက်အများဆုံးအရေအတွက်ကိုသင်သတ်မှတ်နိုင်သည်။
$maxLoops = 10;
$loopCounter = 0;
if ($mysqli->multi_query($sql)) {
do {
if (++$loopCounter > $maxLoops) {
echo "ဖြစ်နိုင်သော Loop ကိုရှာဖွေတွေ့ရှိခဲ့သည်,စစ်ဆင်ရေးဖျက်သိမ်း";
break;
}
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$result->free();
}
} while ($mysqli->next_result());
}
Next_result () ကို အသုံးပြုတဲ့အခါအပြည့်အဝမယုံကြည်နိုင်တဲ့ပြန်လာတန်ဖိုးကိုအထူးဂရုပြုရမယ်။ ပိုမိုများပြားလာခြင်း နှင့်အတူအသုံးပြုရန်, နောက်ရလဒ်မှာအမှန်ပင်ဆက်ရှိနေမှသာဆက်လက်လုပ်ဆောင်ရန်သေချာပါစေ။ ဒီလိုမှမဟုတ်ရင် SQL Execution Paths တွေအောက်မှာလူသေကောင်လေးတွေအောက်မှာအထူးသဖြင့်အချည်းနှီးသောရလဒ်တွေဒါမှမဟုတ်စုံစမ်းမှုမပြည့်စုံတဲ့ထုတ်ပြန်ချက်တွေကိုအရောအနှောကွပ်မျက်မှုတွေရှိရင်။
PHP နှင့်ဒေတာဘေ့စ်လုပ်ငန်းများနှင့်ပတ်သက်သည့်အကောင်းဆုံးအလေ့အကျင့်များကိုပိုမိုကြည့်ရှုရန်သင်ကြည့်ရှုနိုင်သည် -