လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Next_result () မှတ်ဥာဏ်မပေးနိုင်သည့်အလားအလာရှိသောထောင်ချောက်များနှင့် optimization နည်းလမ်းများ

Next_result () မှတ်ဥာဏ်မပေးနိုင်သည့်အလားအလာရှိသောထောင်ချောက်များနှင့် optimization နည်းလမ်းများ

gitbox 2025-05-02

PHP တွင်ဒေတာဘေ့စ်လုပ်ငန်းများကိုလုပ်ဆောင်သောအခါဒေတာမေးမြန်းချက်များကိုကိုင်တွယ်ရန် MySQLI သို့မဟုတ် PDO Extensions များကိုမကြာခဏသုံးလေ့ရှိသည်။ Next_Result () သည် MySQLI extension တွင် function တစ်ခုဖြစ်သည်။ ၎င်း၏အဓိကလုပ်ဆောင်ချက်သည်မေးမြန်းချက်မျိုးစုံအကောင်အထည်ဖော်သောအခါနောက်ရလဒ်ကိုပြောင်းရွှေ့ရန်ဖြစ်သည်။ သို့သော်, နောက် function ကိုအသုံးပြုသောအခါ, မှတ်ဥာဏ်ယိုစိမ့်မှုများဖြစ်ပေါ်လာသည့်အခါ, ဤဆောင်းပါးသည် လာမည့် raisulult () ၏အကြောင်းရင်းများကိုလေ့လာရန်နှင့်မှတ်ဉာဏ်ပေါက်ကြားမှုများကိုဖြစ်ပေါ်စေပြီးအကောင်းဆုံးသောအကြံပြုချက်များကိုပေးလိမ့်မည်။

Next_result () function ကဘာလဲ။

စုံစမ်းမှုများစွာပြုလုပ်သောအခါကျွန်ုပ်တို့သည်ရလဒ်များစွာရရှိရန်အတွက်ရလဒ်မျိုးစုံရှိနိုင်သည်။ Next_result () function သည်နောက်ရလဒ်သို့ပြောင်းရွှေ့ရန်အသုံးပြုသည်, နောက်ရလဒ်သို့ပြောင်းရွှေ့ရန်အသုံးပြုသည်။ ဥပမာအားဖြင့်, အောက်ပါကုဒ်အတွက်:

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

// ပထမ ဦး ဆုံးမေးမြန်းချက်ကို execute
$mysqli->query("SELECT * FROM table1");

// ဒုတိယမေးခွန်းကိုလုပ်ဆောင်ပါ
$mysqli->query("SELECT * FROM table2");

// အသုံးပြု next_result() ရလဒ် set ကိုပြောင်းပါ
$mysqli->next_result();

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

အဘယ်ကြောင့် Next_result () သည် မှတ်ဉာဏ်ပေါက်ကြားမှုဖြစ်စေသနည်း။

မှတ်ဉာဏ်ယိုစိမ့်မှုတွေပရိုဂရမ်သည်စစ်ဆင်ရေးအတွင်းအသုံးမပြုသောကြောင့်မှတ်ဥာဏ်မရှိတော့သည့်အခါမှတ်ဥာဏ်ကိုစဉ်ဆက်မပြတ်တိုးလာသည်။ Next_result () သည် မှတ်ဉာဏ်ပေါက်ကြားမှုများကိုအောက်ပါအတိုင်းဖြစ်ပေါ်စေသည့်အဓိကအကြောင်းရင်းများမှာ -

  1. ယခင်စုံစမ်းမှု၏ရလဒ်အစုကိုမရှင်းလင်းပါ။ သင်မေးမြန်းမှုမျိုးစုံကိုသင်ကွပ်မျက်ခံရသည့်အခါတစ်ခုချင်းစီသည်ရလဒ်ကိုပြန်လည်ရရှိခဲ့သည်။ အကယ်. သင်ယခင်စုံစမ်းမှု၏ရလဒ်အလုံးအရင်းကိုမရှင်းလင်းပါက scription အဆုံးသတ်သည်အထိမှတ်ဉာဏ်ရှိအချက်အလက်များဆက်လက်တည်ရှိလိမ့်မည်။ ယခင်စုံစမ်းမှု၏ရလဒ်ကို Next_resulult () ကို အသုံးပြုသောအခါစနစ်တကျသန့်ရှင်းရေးမလုပ်ပါကမှတ်ဉာဏ်သည်တဖြည်းဖြည်းတိုးလာလိမ့်မည်။

  2. Next_result () အကြိမ်ကြိမ်ခေါ်ဆိုခြင်းပြီးနောက်အခမဲ့မှတ်ဉာဏ်ကိုမေ့သွားပြီးနောက် - တစ်ခုချင်းစီကိုခေါ်ဆိုမှုတစ်ခုချင်းစီကိုခေါ်ယူပြီးနောက်ရလဒ်အစု အဝေး () တွင်အချက်အလက်များကိုစနစ်တကျထုတ်လွှတ်ခြင်းမရှိပါက ( free_result () ) သည် Memory ကိုဆက်လက်သိမ်းဆည်းသွားမည်မဟုတ်ချေ။ ဥပမာအားဖြင့်:

     $mysqli->query("SELECT * FROM table1");
    $mysqli->next_result(); // လာမယ့်စုံစမ်းမှုရလဒ်ကို switch ကို switch
    

    ယခင်စုံစမ်းမှု၏ရလဒ်ကိုမထုတ်ပြန်ပါကမှတ်ဉာဏ်စုဆောင်းခြင်းသည်မှတ်ဉာဏ်ယိုစိမ့်မှုကိုရရှိစေသည်။

  3. သင့်လျော်သောအမှားကိုင်တွယ်ခြင်းမရှိပါ - Query Process တွင်အမှားတစ်ခုဖြစ်ပြီးသင့်တော်သောအမှားကိုင်တွယ်မှုမပြုလုပ်နိုင်ပါကဤအစီအစဉ်သည်လုပ်ငန်းခွင်အရင်းအမြစ်များကိုစနစ်တကျသန့်ရှင်းရေးမလုပ်နိုင်ပါ။ ရလဒ်ကိုမှတ်ဉာဏ်သည်အချိန်မီပြန်မလာပါ။

မှတ်ဉာဏ်ယိုစိမ့်မှုကိုရှောင်ရှားရန်မည်သို့အကောင်းဆုံးဖြစ်မည်နည်း။

Next_result () ကြောင့်ဖြစ်ရတဲ့မှတ်ဥာဏ်ယိုစိမ့်မှုကိုရှောင်ရှားရန် (), ဤတွင်အချို့သော optimization အကြံပြုချက်များဖြစ်ကြသည်။

  1. ရလဒ် set ကိုသန့်ရှင်းရေးလုပ်ရန် free_result () function ကိုသုံးပါ ၎င်းသည်မှတ်ဥာဏ်ယိုစိမ့်မှုများကိုရှောင်ရှားရန်အရေးကြီးသောခြေလှမ်းတစ်ခုဖြစ်သည်။ ဥပမာအားဖြင့်:

     $result1 = $mysqli->query("SELECT * FROM table1");
    $result1->free(); // ပထမရလဒ် set ကိုလွှတ်
    
    $mysqli->query("SELECT * FROM table2");
    $mysqli->next_result();
    

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

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

     $mysqli->close(); // ဒေတာဘေ့စ် connection ကိုပိတ်ပါ
    

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

  3. Multi_Query () ကို သုံး ပါ။ စုံစမ်းမှုမျိုးစုံကိုကိုင်တွယ်ရန် - သင်စုံစမ်းမှုများစွာကိုအကောင်အထည်ဖော်ရန်လိုပါက, ဥပမာအားဖြင့်:

     $mysqli->multi_query("SELECT * FROM table1; SELECT * FROM table2;");
    
    do {
        if ($result = $mysqli->store_result()) {
            // အပြောင်းအလဲနဲ့ရလဒ်အစုံ
            $result->free();
        }
    } while ($mysqli->next_result());
    

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

  4. အမှိုက်သရိုက်စုဆောင်းခြင်းကို enable: PHP တွင် built-in အမှိုက်သရိုက်များစုဆောင်းမှုယန္တရားရှိသည်။ အချို့ဖြစ်ရပ်များတွင်အမှိုက်သရိုက်စုဆောင်းမှုသည်အသေသတ်ခြင်းကိုနှောင့်နှေးစေနိုင်သည် ဥပမာအားဖြင့်:

     gc_collect_cycles(); // ကိုယ်တိုင်အမှိုက်သရိုက်စုဆောင်းခြင်း
    

    ၎င်းသည်မှတ်ဥာဏ်မရှိတော့သည့်မှတ်ဉာဏ်အရာဝတ်ထုများကိုသန့်ရှင်းစေပြီးမှတ်ဉာဏ်ယိုစိမ့်မှုအန္တရာယ်ကိုလျော့ပါးစေသည်။

အကျဉ်းချုပ်

PHP တွင် Multi-queries များကိုကိုင်တွယ်ရာတွင် နောက် function သည် function သည်အသုံးဝင်သော်လည်းရလဒ်မေးမြန်းချက်များကိုမှန်ကန်စွာစီမံခြင်းမပြုပါကမှတ်ဉာဏ်ပေါက်ကြားမှုများဖြစ်ပေါ်စေနိုင်သည်။ ဤအရာကိုရှောင်ရှားရန်ကျွန်ုပ်တို့သည်ရလဒ်များကိုသန့်ရှင်းရေးလုပ်ရန်, ဒေတာဘေ့စ် connection ကိုပိတ်ပြီးဒေတာဘေ့စ်ဆက်သွယ်မှုကိုပိတ်ထားသည့်အခါအခြားမှတ် ဉာဏ် စွမ်းဆောင်ရည်အကောင်းဆုံးအစီအမံများကိုချမှတ်သင့်သည်။ ဤနည်းလမ်းများမှတစ်ဆင့် PHP ပရိုဂရမ်များ၏မှတ်ဉာဏ်အသုံးပြုမှုသည်အပြေးချိန်၌ပိုမိုထိရောက်စွာပိုမိုထိရောက်နိုင်ကြောင်းသေချာစေရန်နှင့်မလိုအပ်သောမှတ်ဉာဏ်ယိုစိမ့်မှုများကိုရှောင်ရှားရန်ဖြစ်နိုင်သည်။