Development Process တွင် Commandigniter (အထူးသဖြင့် commandignigner 3) ကို အသုံးပြု. တစ်ခါတစ်ရံတွင် SQL Queries များပါ 0 င်သောထုတ်ပြန်ချက် (စုံစမ်းမှု) ကိုလုပ်ထုံးလုပ်နည်းများကိုလုပ်ရမည်။ ဥပမာအားဖြင့်ကျွန်ုပ်တို့သည်ထိရောက်သောလုပ်ထုံးလုပ်နည်းများကိုတစ်ပြိုင်နက်တည်းခေါ်ဆိုခြင်းသို့မဟုတ်ထိရောက်မှုကိုတိုးတက်စေရန်တောင်းဆိုမှုတစ်ခုတွင်မေးမြန်းချက်များစွာကိုကွပ်မျက်ရန်လိုပေမည်။
သို့သော် Multi-statement query ကိုသုံးသောအခါဘုံပြ problem နာတစ်ခုမှာ - ပထမရလဒ်အစုကိုသာသုံးနိုင်သည်။ ဘာဖြစ်လို့လဲဆိုတော့ MySQLI Drivers ကိုသုံးတဲ့အခါ citigigniter ဟာအများအားဖြင့်ရလဒ်မျိုးစုံကိုအလိုအလျောက်မလုပ်ဆောင်နိုင်လို့ပါ။ ဤပြ problem နာကိုဖြေရှင်းရန်ကျွန်ုပ်တို့သည်ယခင်ရလဒ်ကိုသန့်ရှင်းရေးလုပ်ရန်အတွက် ဒေါ်လာ -> DB-> Next_result () နည်းလမ်းကိုကိုယ်တိုင်ခေါ်ဆိုရန်လိုအပ်သည်။
ဒီဆောင်းပါးက Next_result () ကို costigniter ကိုဘယ်လိုမှန်ကန်စွာသုံးနိုင်မလဲဆိုတာကိုပြလိမ့်မယ်။
သင့်တွင်သိုလှောင်ထားသည့်လုပ်ထုံးလုပ်နည်းဖိုင်တစ်ခုရှိသည်ဆိုပါစို့။
$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 ကို၏အကူအညီဖြင့်အကောင်အထည်ဖော်နိုင်သည်။
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 () ကို သုံးနိုင်သည်။
သင် multi_query () ကို တိုက်ရိုက်သုံးနိုင်ပေမယ့်, အထူးသဖြင့်လုံခြုံရေးနှင့်တည်ငြိမ်မှုအတွက်လိုအပ်ချက်များရှိပါက ထုတ်ပြန်ချက်များစွာကိုသီးခြားစီလုပ်ဆောင်ရန်အထူးအကြံပြုလိုပါသည် ။ ဒေတာဘေ့စ်လုပ်ငန်းများအတွက်အောက်ပါအလေ့အကျင့်များကိုအကြံပြုပါသည်။
ဆက်သွယ်မှုကိုသန့်ရှင်းရေးလုပ်ရန် Free_Result () နှင့်နောက်ဆက်တွဲ () နောက်ဆက်တွဲ () နောက်ဆက်တွဲ () ကိုခေါ်ပါ။
Model ထဲမှ ခေါ်ဆိုမှု များစွာကိုတိုက်ရိုက်ရေးသားခြင်းကိုရှောင်ကြဉ်ပါ။
အကယ်. သင်သည် Multi_query () ကို သုံးရန်လိုပါကပြန်လည်ပြုပြင်ခြင်းရလဒ်အားလုံးကိုသေချာအောင်လုပ်ပါ။
သင်သည်ဤလုပ်ငန်းစဉ်ကိုစံပြနည်းလမ်းသို့ 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];
Multi-statement query ကို debing လုပ်သည့်အခါ actignigner ၏ logigring function ကို enable လုပ်ရန်အကြံပြုသည်။