လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> multi-statement query ကိုကိုင်တွယ်ရန် texigniter () ကို costigniter ကိုပေါင်းစပ်

multi-statement query ကိုကိုင်တွယ်ရန် texigniter () ကို costigniter ကိုပေါင်းစပ်

gitbox 2025-05-06

Development Process တွင် Commandigniter (အထူးသဖြင့် commandignigner 3) ကို အသုံးပြု. တစ်ခါတစ်ရံတွင် SQL Queries များပါ 0 င်သောထုတ်ပြန်ချက် (စုံစမ်းမှု) ကိုလုပ်ထုံးလုပ်နည်းများကိုလုပ်ရမည်။ ဥပမာအားဖြင့်ကျွန်ုပ်တို့သည်ထိရောက်သောလုပ်ထုံးလုပ်နည်းများကိုတစ်ပြိုင်နက်တည်းခေါ်ဆိုခြင်းသို့မဟုတ်ထိရောက်မှုကိုတိုးတက်စေရန်တောင်းဆိုမှုတစ်ခုတွင်မေးမြန်းချက်များစွာကိုကွပ်မျက်ရန်လိုပေမည်။

သို့သော် Multi-statement query ကိုသုံးသောအခါဘုံပြ problem နာတစ်ခုမှာ - ပထမရလဒ်အစုကိုသာသုံးနိုင်သည်။ ဘာဖြစ်လို့လဲဆိုတော့ MySQLI Drivers ကိုသုံးတဲ့အခါ citigigniter ဟာအများအားဖြင့်ရလဒ်မျိုးစုံကိုအလိုအလျောက်မလုပ်ဆောင်နိုင်လို့ပါ။ ဤပြ problem နာကိုဖြေရှင်းရန်ကျွန်ုပ်တို့သည်ယခင်ရလဒ်ကိုသန့်ရှင်းရေးလုပ်ရန်အတွက် ဒေါ်လာ -> DB-> Next_result () နည်းလမ်းကိုကိုယ်တိုင်ခေါ်ဆိုရန်လိုအပ်သည်။

ဒီဆောင်းပါးက Next_result () ကို costigniter ကိုဘယ်လိုမှန်ကန်စွာသုံးနိုင်မလဲဆိုတာကိုပြလိမ့်မယ်။

အခြေခံဥပမာ - Multi_query နှင့် Next_result ကိုသုံးပါ။

သင့်တွင်သိုလှောင်ထားသည့်လုပ်ထုံးလုပ်နည်းဖိုင်တစ်ခုရှိသည်ဆိုပါစို့။

 $sql = "
    CALL get_users(); 
    CALL get_orders();
";

Multi-statement SQL အမျိုးအစားကို execute လုပ်ရန်, သင်သည် query () နည်းလမ်းကို သုံး. ရလဒ်ကိုကိုယ်တိုင်စီမံနိုင်သည်။

 $result = $this->db->query("CALL get_users();");

if ($result) {
    $users = $result->result();

    // ပထမရလဒ်ကိုပြင်ဆင်ပါ
    $result->free_result();
    $this->db->next_result();

    // ဒုတိယရလဒ်ကိုသတ်မှတ်ပါ
    $result2 = $this->db->query("CALL get_orders();");

    if ($result2) {
        $orders = $result2->result();

        // ထပ်မံသန့်ရှင်းရေး
        $result2->free_result();
        $this->db->next_result();
    }
}

ဤနည်းလမ်းသည်တစ်ချိန်တည်းတွင်သိုလှောင်ထားသည့်လုပ်ထုံးလုပ်နည်းတစ်ခုသာခေါ်ဆိုရန်သင့်တော်သည်။ သို့သော်သင်သည် SQL ထုတ်ပြန်ချက်များကိုတစ်ပြိုင်နက်တည်းလုပ်ဆောင်လိုပါကဥပမာ -

 $sql = "
    CALL get_users(); 
    CALL get_orders(); 
    CALL get_products();
";

၎င်းကို MySQLI ၏ဇာတိ multiery () function ကို၏အကူအညီဖြင့်အကောင်အထည်ဖော်နိုင်သည်။

MySQLI ၏ Multi_Query Method ကိုအသုံးပြုခြင်း

commandigniter အတွက်, သင်သည် MySQLI driver ကိုအသုံးပြုနေပါကသင်လုပ်နိုင်သည်။

 $mysqli = $this->db->conn_id; // နောက်ခံကိုရယူပါ MySQLi အရင်းအမြစ်များကိုဆက်သွယ်ပါ

$sql = "
    CALL get_users(); 
    CALL get_orders(); 
    CALL get_products();
";

if ($mysqli->multi_query($sql)) {
    do {
        if ($result = $mysqli->store_result()) {
            // လက်ရှိရလဒ် set ကိုဖြစ်စဉ်
            $data[] = $result->fetch_all(MYSQLI_ASSOC);
            $result->free();
        }
    } while ($mysqli->more_results() && $mysqli->next_result());
}

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

costigriter အတွက်မှန်ကန်သောအသုံးပြုမှုများအတွက်အကြံပြုချက်များ

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

  1. ဆက်သွယ်မှုကိုသန့်ရှင်းရေးလုပ်ရန် Free_Result () နှင့်နောက်ဆက်တွဲ () နောက်ဆက်တွဲ () နောက်ဆက်တွဲ () ကိုခေါ်ပါ။

  2. Model ထဲမှ ခေါ်ဆိုမှု များစွာကိုတိုက်ရိုက်ရေးသားခြင်းကိုရှောင်ကြဉ်ပါ။

  3. အကယ်. သင်သည် Multi_query () ကို သုံးရန်လိုပါကပြန်လည်ပြုပြင်ခြင်းရလဒ်အားလုံးကိုသေချာအောင်လုပ်ပါ။

ဥပမာ - စံပြနည်းလမ်းသို့ Encapsulation

သင်သည်ဤလုပ်ငန်းစဉ်ကိုစံပြနည်းလမ်းသို့ oncapsulate လုပ်နိုင်သည်။

 public function get_multi_data()
{
    $mysqli = $this->db->conn_id;

    $sql = "
        CALL get_users(); 
        CALL get_orders(); 
        CALL get_products();
    ";

    $data = [];

    if ($mysqli->multi_query($sql)) {
        do {
            if ($result = $mysqli->store_result()) {
                $data[] = $result->fetch_all(MYSQLI_ASSOC);
                $result->free();
            }
        } while ($mysqli->more_results() && $mysqli->next_result());
    }

    return $data;
}

Controller တွင်၎င်းကိုသင်ဤကဲ့သို့သောခေါ်ဆိုနိုင်သည်။

 $this->load->model('Data_model');
$result_sets = $this->Data_model->get_multi_data();

$users = $result_sets[0];
$orders = $result_sets[1];
$products = $result_sets[2];

သိကောင်းစရာများ - Debugging လုပ်သည့်အခါ output ကို log လုပ်ရန်ဂရုပြုပါ

Multi-statement query ကို debing လုပ်သည့်အခါ actignigner ၏ logigring function ကို enable လုပ်ရန်အကြံပြုသည်။