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

Source Code ရှုထောင့်မှအကောင်အထည်ဖော်မှုယန္တရားနှင့်အခြားအလေ့အကျင့်များ () ၏အကောင်းဆုံးအလေ့အကျင့်များကိုခွဲခြမ်းစိတ်ဖြာပါ

gitbox 2025-05-06

PHP ကို ​​အသုံးပြု. ဒေတာဘေ့စ်နှင့်သက်ဆိုင်သောလုပ်ဆောင်မှုများကိုရေးဆွဲသည့်အခါ MySQLI extension သည် MySQL ဒေတာဘေ့စ်လုပ်ငန်းများကိုကိုင်တွယ်ရန် APIs အပြည့်အဝသတ်မှတ်ထားသည်။ ၎င်းတို့အနက် နောက် function သည် multi-query ရိယာအမျိုးမျိုးတွင်မကြာခဏပေါ်လာလေ့ရှိသည်။ ဤဆောင်းပါးသည် source code ကိုရှုထောင့်မှကြည့်ရှုရန် () နောက်ဆက်တွဲ () ၏အကောင်အထည်ဖော်မှုယန္တရားကိုလေ့လာပြီးအလေ့အကျင့်အပေါ်အခြေခံပြီးထိရောက်သောအသုံးပြုမှုနည်းစနစ်အချို့ကိုအကျဉ်းချုပ်ဖော်ပြလိမ့်မည်။

1 ။ MySQLI :: Next_Result () လုပ်ပေးတာဘာလဲ။

MySQLI :: Next_Result () သည် MySQLI extension တွင် mySQLI extension တွင်နည်းလမ်းတစ်ခုဖြစ်သည်။ MySQLI :: 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());
}

Next_Result () အထက်ပါအချက်များအတွင်းခံရလဒ်သည်နောက်ရလဒ်ကိုသတ်မှတ်ထားသည်။

2 ။ နောက်တစ်ခေါက် action_result () ၏ source code ကိုရှုထောင့်မှအကောင်အထည်ဖော်မှုယန္တရားကိုခွဲခြမ်းစိတ်ဖြာပါ

1 ။ PHP Source Code ဝင်ပေါက်

PHP source code တွင် Next_result () ၏အကောင်အထည်ဖော်မှုသည် Ext / MySqli / MySqli_nonapi.c နှင့် MySQL C API function ကို MySQL_NEXT_RESELT () နောက်ခံ MySQL C API function တွင်တည်ရှိသည်။

 PHP_FUNCTION(mysqli_next_result)
{
    MYSQLI_RESOURCE *mysqli_resource;
    zval *mysql_link;

    if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
        return;
    }

    MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID);

    RETVAL_BOOL(!mysql_next_result(mysql));
}

2 ။ အခြေခံ MySQL C API ၏အပြုအမူ

အခြေခံ MySQL_NEXt_RESELT () သည် MySQL server မှလာမည့်ရလဒ်နှင့်ပတ်သက်သောနောက်ရလဒ်ကိုရရှိပြီး၎င်းကို connection object တွင်ထည့်ပါလိမ့်မည်။ ၎င်း၏ပြန်လာတန်ဖိုးမှာ -

  • 0 : အောင်မြင်မှုနှင့်ရလဒ်အစုတခုရှိပါတယ်။

  • > 0 : အမှားတစ်ခုဖြစ်ပွားခဲ့သည်။

  • -1 : ရလဒ်မရှိတော့ပါ။

3 ။ ဒေတာဖွဲ့စည်းပုံစီမံခန့်ခွဲမှု

PHP သည် MySQL_RES အမျိုးအစားများအတွက် Cache ကို အသုံးပြုသည်။ MySQL_RES အမျိုးအစားများအတွက် CAFES ကို အသုံးပြုသည်။ ဒီလိုမှမဟုတ်ရင် MySQL server က "စည်းညှိခြင်းမှပညတ်တရားများ, ယခု command ကိုမ run နိုင်ပါ။

3 ။ အကောင်းဆုံးအလေ့အကျင့်များနှင့်အသုံးပြုမှုအကြံပြုချက်များ

1 ။ Multi_query () ကိုသုံးတဲ့အခါ, အမြဲတမ်း Next_result ကိုအမြဲတမ်းကိုက်ညီပါ။

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

 do {
    if ($result = $mysqli->store_result()) {
        // အပြောင်းအလဲများရလဒ်များ集
        $result->free();
    }
} while ($mysqli->next_result());

2 ။ အမြဲတမ်းရလဒ်အစုံအားလုံး process

သင်ပထမရလဒ်ကိုသာဂရုစိုက်လျှင်ပင်ဆက်သွယ်မှုကိုဆိုင်းငံ့ထားရန်သေချာစေရန်နောက်ဆက်တွဲရလဒ်များကိုလုပ်ဆောင်ရန် Next_result () ကို သုံးပါ။

 while ($mysqli->more_results()) {
    $mysqli->next_result();
}

3 ။ ချို့ယွင်းချက်ကိုင်တွယ်ရှင်းလင်းရမည်ဖြစ်သည်

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

 if (!$mysqli->next_result() && $mysqli->errno) {
    // အမှားတစ်ခုရှိတယ်,သစ်ခုတ်
}

4 ။ ငွေပေးချေမှုလုပ်ငန်းများနှင့်ပေါင်းစပ်သောအခါအမိန့်ကိုပိုမိုအာရုံစိုက်ပါ

Action Multi-statement query ကိုလွှဲပြောင်းပြီးနောက်ရလဒ်အလုံးအရင်းကိုအဆင့်တစ်ခုစီတိုင်းတွင်မှန်ကန်စွာပြုလုပ်ပြီးငွေပေးငွေယူမအောင်မြင်မှုများကိုရှောင်ရှားရန်သေချာစေရန်။

5 ။ SQL ဆေးထိုးခြင်းကိုကာကွယ်ရန်သတိထားပါ

Multi_Query () ကို သုံး. Multi-statements () ကို အသုံးပြု. လုပ်ဖော်ကိုင်ဖက်များသည် SQL ကိုခွဲထုတ်ခြင်းဖြင့် SQL Injection အန္တရာယ်များကိုမိတ်ဆက်ရန်ပိုမိုလွယ်ကူသည်။ parameterization သို့မဟုတ်စိစစ်အတည်ပြု input ကိုသုံးရန်သေချာပါစေ။

4 ။ အကြံပြုချက်များ debugging

  • MySQLI_ERRORERRORRERRE () အမှားအယွင်းကိုကြည့်ရှုရန်။

  • MySQL General_log ကိုဖွင့်ခြင်းသို့မဟုတ် Packets ကိုခွဲခြမ်းစိတ်ဖြာရန် packets များကိုဖမ်းယူရန် TCPDump ကဲ့သို့သောကိရိယာများကိုအသုံးပြုပါ။

  • ဖွံ့ဖြိုးရေးပတ် 0 န်းကျင်တွင်အသေးစိတ်အမှားအစီရင်ခံစာများကိုအသေးစိတ်ဖော်ပြရန် MySQLI_REPORE () ကို သုံးရန်ကြိုးစားပါ။

 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

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

MySQLI :: Next_Result () သည်ရိုးရှင်းသော interface ခေါ်ဆိုမှုတစ်ခုသာရှိသော်လည်း၎င်းသည်ရှုပ်ထွေးသောဆက်သွယ်ရေးလုပ်ငန်းစဉ်နှင့်ပြည်နယ်စီမံခန့်ခွဲမှုယန္တရားများကိုဖုံးကွယ်ထားသည်။ ၎င်း၏အခြေခံယုတ္တိဗေဒကိုနားလည်ခြင်းသည် Multi-levice set set ကိုပိုမိုထိရောက်စွာကိုင်တွယ်ရန်ကူညီလိမ့်မည်။ အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်အကောင်းဆုံးအလေ့အကျင့်များအရအရင်းအမြစ်များကိုအပြည့်အဝထုတ်လွှင့်ခြင်းနှင့်အမှားအယွင်းများကိုကိုင်တွယ်ခြင်းဒေတာဘေ့စ်အပြန်အလှန်လုပ်ဆောင်မှုကိုတည်ငြိမ်စေရန်အတွက်သော့ချက်ဖြစ်သည်။

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