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

လာမယ့်အကြောင်းရင်းများကိုခွဲခြမ်းစိတ်ဖြာခြင်း () ကွင်းဆက်တွင်အသုံးပြုသောအခါသေစေသည့်ကွင်းဆက်ကိုဖြစ်ပေါ်စေသည်

gitbox 2025-04-29

Developer များသည် DataBase Operations အတွက် PHP အတွက် PHP အတွက် PHP အတွက် PHP ကိုအသုံးပြုသောအခါ php ကိုအသုံးပြုသောအခါနောက် function ကိုအသုံးပြုကြသည်။ သို့သော်ကွင်းဆက်တွင်မလျော်ကန်စွာအသုံးပြုခဲ့လျှင်၎င်းသည် script ကိုပုံမှန်အဆုံးသတ်ရန်ပျက်ကွက်စေနိုင်သည်။ ဤဆောင်းပါးသည်ဤအဖြစ်အပျက်ကိုအသေးစိတ်လေ့လာပြီးယုံကြည်စိတ်ချရသောဖြေရှင်းနည်းပေးလိမ့်မည်။

1 ။ ပြ problem နာပေါ်လာလိမ့်မယ်

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 () ဟုခေါ်သော အချိန်သည် မှန်ကန် ပါ က ,

2 ။ အဘယ်ကြောင့်သံသရာရှိသနည်း

Next_result () ၏ရည်ရွယ်ချက်မှာ MySqli ကိုနောက်ရလဒ်အဖြစ်ပြောင်းရွှေ့ရန်နှင့် Boolean ကိုပြန်လာရန်ဖြစ်သည်။

  • စစ်မှန်သော နည်းလမ်းများသည်ရလဒ်ပိုမိုအစုံသို့မဟုတ်အောင်မြင်သော switch တစ်ခုရှိသည်။

  • မှားယွင်းသော နည်းလမ်းများပြန်ပို့ခြင်းနည်းလမ်းများမရှိတော့ပါ။

သို့သော်နောက်ဆုံးရလဒ်မှာ အချည်းနှီးသောရလဒ် အနေဖြင့် ( နောက်ဆုံး ကြေညာချက်ကဲ့သို့) အ ချည်း နှီး ဖြစ်သော်လည်းမစုံစမ်းပါ။ သို့မဟုတ်အသစ် သော စုံစမ်းမှု ဆိုင်ရာ မဟုတ်သောကြေညာချက်သည် မှားယွင်းစွာ ပြန်လည်မွမ်းမံခြင်း ,

3 ။ ဖြေရှင်းနည်း

? နည်းလမ်း 1 - ရလဒ်ပိုများမှုရှိမရှိစစ်ဆေးပါ

သင်လုပ်ဆောင်နိုင်သည့်ရလဒ်အ စု တခုရှိသေးရှိ,

 $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());
}

? နည်းလမ်း 2 - အမြင့်ဆုံးသံသရာအရေအတွက်ကိုသတ်မှတ်ပါ (ကာကွယ်ရေး)

ရလဒ်အစုံအရေအတွက်ကိုအပြည့်အဝမဆုံးဖြတ်နိုင်ပါကအသေကောင်များကိုကာကွယ်ရန်အတွက်အများဆုံးအရေအတွက်ကိုသင်သတ်မှတ်နိုင်သည်။

 $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());
}

4 ။ အကျဉ်းချုပ်

Next_result () ကို အသုံးပြုတဲ့အခါအပြည့်အဝမယုံကြည်နိုင်တဲ့ပြန်လာတန်ဖိုးကိုအထူးဂရုပြုရမယ်။ ပိုမိုများပြားလာခြင်း နှင့်အတူအသုံးပြုရန်, နောက်ရလဒ်မှာအမှန်ပင်ဆက်ရှိနေမှသာဆက်လက်လုပ်ဆောင်ရန်သေချာပါစေ။ ဒီလိုမှမဟုတ်ရင် SQL Execution Paths တွေအောက်မှာလူသေကောင်လေးတွေအောက်မှာအထူးသဖြင့်အချည်းနှီးသောရလဒ်တွေဒါမှမဟုတ်စုံစမ်းမှုမပြည့်စုံတဲ့ထုတ်ပြန်ချက်တွေကိုအရောအနှောကွပ်မျက်မှုတွေရှိရင်။

PHP နှင့်ဒေတာဘေ့စ်လုပ်ငန်းများနှင့်ပတ်သက်သည့်အကောင်းဆုံးအလေ့အကျင့်များကိုပိုမိုကြည့်ရှုရန်သင်ကြည့်ရှုနိုင်သည် -

https://gitbox.net/php-mysql-practices