လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Next_result () နှင့် Multi-resolution multi-producting လုပ်ခြင်းသည်အထွေထွေလုပ်ဆောင်ချက်များအဖြစ် adapsult လုပ်နည်း

Next_result () နှင့် Multi-resolution multi-producting လုပ်ခြင်းသည်အထွေထွေလုပ်ဆောင်ချက်များအဖြစ် adapsult လုပ်နည်း

gitbox 2025-05-02

အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်အထူးသဖြင့် MySQL Multi-query function ကိုအသုံးပြုသောအခါရလဒ်မျိုးစုံပြုလုပ်ရန်လိုအပ်သည့်အခြေအနေများကိုသင်မကြာခဏကြုံတွေ့ရလေ့ရှိသည်။ စည်းလုံးညီညွတ်သောလုပ်ဆောင်မှုနည်းလမ်းမရှိပါက နောက်တစ်ခါ Next_result () နှင့် store_result () ကို ကိုယ်တိုင်ခေါ်ဆိုပါကအချိန်တိုင်းသည်ဒုက်ခဆင်းရဲခြင်းသာမဟုတ်ဘဲအမှားအယွင်းများကိုလည်းကျရောက်စေနိုင်သည်။
Code ကိုပိုပြီးကြော့ရှင်းပြီးကြံ့ခိုင်အောင်ပြုလုပ်ရန်ကျွန်ုပ်တို့သည်ယေဘူယျ function ကို oncapsulate နှင့်ရလဒ်အားလုံးကိုအလိုအလျောက်လုပ်ဆောင်နိုင်သည်။ နောက်တစ်ခုကမင်းကိုဘယ်လိုလုပ်ရမလဲဆိုတာကိုဖြတ်ပြီးမင်းကိုခေါ်သွားမှာပါ။

လာမယ့် _result () နှင့် multi-resolmion အစုံများ၏အပြောင်းအလဲနဲ့နားလည်နားလည်ပါ

MySQLI ကို မေးမြန်းသည့်အခါ (I.E. SQL ထုတ်ပြန်ချက်များကိုတစ်ပြိုင်နက်တည်းပေးပို့ခြင်း) ကိုအသုံးပြုသည့်အခါ 1 ခုစီသည်ရလဒ်အစုအဝေးတစ်ခုနှင့်ကိုက်ညီသည်။ Store_Result () သည်လက်ရှိရလဒ်မှအချက်အလက်များကိုထုတ်ယူရန်တာ 0 န် ယူရန်အတွက် Next_result () ကို အသုံးပြုပါ။

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

အထွေထွေ Multi-resolual processing processing function ကို encapsult

ရလဒ်အားလုံး၏လုပ်ဆောင်မှုများအားလုံး၏လုပ်ဆောင်မှုများကိုပြန်လည်ပြုပြင်ရန်နှင့်အချက်အလက်အားလုံးကိုပြန်လည်ထည့်သွင်းသည့် function ကို oncaps လုပ်နည်းကိုမည်သို့လိုက်နာရမည်ကိုဖော်ပြသည့်ဥပမာတစ်ခုဖြစ်သည်။

 <?php

/**
 * မျိုးစုံမေးမြန်းခြင်းနှင့် process အားလုံးရလဒ်များကိုလုပ်ဆောင်ပါ
 *
 * @param mysqli $mysqli MySQLiအရာဝတ်ထုများကိုချိတ်ဆက်ပါ
 * @param string $multiQuery အကောင်အထည်ဖော်ခံရဖို့မျိုးစုံပစ္စည်းများSQLစုံစမ်းမှုကြေညာချက်(Semicolons နှင့်အတူသီးခြား)
 * @return array ရလဒ်အားလုံးကိုသတ်မှတ်ထားသည့်အချက်အလက်အားလုံးပါ 0 င်သည်
 */
function executeMultiQuery(mysqli $mysqli, string $multiQuery): array
{
    $allResults = [];

    if ($mysqli->multi_query($multiQuery)) {
        do {
            if ($result = $mysqli->store_result()) {
                $data = [];
                while ($row = $result->fetch_assoc()) {
                    $data[] = $row;
                }
                $allResults[] = $data;
                $result->free();
            } else {
                // လက်ရှိရလဒ်သည်ရလဒ်အစုအဝေးမရှိဘဲဖြစ်နိုင်သည်,ဥပမာအားဖြင့်UPDATEသို့မဟုတ်INSERT
                if ($mysqli->errno) {
                    throw new Exception("MySQLအမှား:" . $mysqli->error);
                }
                $allResults[] = null;
            }
        } while ($mysqli->more_results() && $mysqli->next_result());
    } else {
        throw new Exception("စုံစမ်းမေးမြန်းမှုမျိုးစုံပျက်ကွက်:" . $mysqli->error);
    }

    return $allResults;
}

// ဥပမာအသုံးပြုမှု
$mysqli = new mysqli('localhost', 'root', 'password', 'testdb');

if ($mysqli->connect_errno) {
    die("ဆက်သွယ်မှုမအောင်မြင်ပါ:" . $mysqli->connect_error);
}

try {
    $sql = "
        SELECT * FROM users;
        SELECT * FROM orders;
        UPDATE products SET stock = stock - 1 WHERE id = 5;
    ";
    $results = executeMultiQuery($mysqli, $sql);

    // အားလုံးစုံစမ်းမှုရလဒ်များ output ကို
    foreach ($results as $index => $resultSet) {
        echo "1 ။ " . ($index + 1) . " ရလဒ် set ကို:<br>";
        if (is_array($resultSet)) {
            foreach ($resultSet as $row) {
                echo htmlspecialchars(json_encode($row)) . "<br>";
            }
        } else {
            echo "(ပြန်လာရလဒ်မရှိပါ,ဥပမာအားဖြင့်UPDATEသို့မဟုတ်INSERTအသေအချာပေြာဆိုချက်)<br>";
        }
        echo "<hr>";
    }
} catch (Exception $e) {
    echo "发生အမှား:" . $e->getMessage();
}

$mysqli->close();
?>

မှတ်သားရန်အရာ

  1. ရလဒ်ကိုဖြန့်ချိရန်အရင်းအမြစ်များကိုအချိန်မီသတ်မှတ်ရန်အတွက်သတ်မှတ်ထားသည်

  2. အမှားရှာဖွေခြင်း - Multi_Query () သို့မဟုတ် သိုလှောင်ခြင်း အမှားအယွင်းတစ်ခုဖြစ်ပါက,

  3. ရလဒ်အလုံးစုံမပါဘဲစစ်ဆင်ရေးကိုလိုက်လျောညီထွေဖြစ်အောင်လုပ်ခြင်း - မွမ်းမံခြင်း , ထည့်သွင်းခြင်း , ဖျက်ခြင်း နှင့်အခြားထုတ်ပြန်ချက်များသည်ရလဒ်ကိုမပြန်ပါ။

ကောက်ချက်

ရလဒ်အစုကိုစာဝှက်ခြင်းနှင့်ပြုပြင်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည် Code ကိုပိုမိုတိကျမှုပြုလုပ်နိုင်ရုံသာမက MySQL ဆက်သွယ်မှုပရမ်းပတာ၏ပြ problem နာကိုထိထိရောက်ရောက်ရှောင်ရှားနိုင်သည်။ သင်၏စီမံကိန်းသည် SQL Queries မျိုးစုံကိုမကြာခဏကိုင်တွယ်ရန်လိုအပ်ပါကစံသတ်မှတ်ထားသော encapsulation များအတွက်အလားတူနည်းလမ်းကိုအသုံးပြုရန်အထူးအကြံပြုလိုပါသည်။

အကယ်. သင်သည် multi-queries များနှင့်ပေါင်းစပ်ခြင်းကဲ့သို့သောအဆင့်မီဘက်စုံအသုံးပြုမှုများအကြောင်းပိုမိုသိရှိလိုပါကသို့မဟုတ်ထိုကဲ့သို့သော encapsulation များကိုကြီးမားသောစီမံကိန်းများတွင်မည်သို့ပေါင်းစည်းရမည်နည်း။ https://gitbox.net ! ??