ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် PHP ကိုအသုံးပြုသောအခါ developer များစွာသည်မေးမြန်းချက်မျိုးစုံလုပ်ဆောင်ရန် MySQLI extension ကိုရွေးချယ်ကြသည်။ ဒီဇာတ်လမ်းမှာတော့ နောက်တစ်ခေါက် () နည်းလမ်းဟာအသုံးဝင်မှာပါ။ သို့သော်ဤနည်းလမ်းကိုအသုံးပြုခြင်းတွင်ထင်ရှားသောထောင်ချောက်အချို့ရှိသည်။ ၎င်း၏ကွဲပြားခြားနားမှုများကို PDE နှင့်ပိုမိုနားလည်ခြင်းနှင့်ပိုမိုကောင်းမွန်သောအခြားရွေးချယ်စရာများရှိ, မရှိ, ခိုင်လုံသောအခြားရွေးချယ်စရာများရှိ,
Next_Result () သည် Myies-query ကို ကိုင်တွယ်ရန် MySQLI extension မှပေးသောနည်းလမ်းဖြစ်သည်။ ၎င်း၏ရည်ရွယ်ချက်မှာ Database client ကိုနောက်ရလဒ်ကိုဆက်လက်ဖတ်ရှုရန်ပြောရန်ဖြစ်သည်။
ပုံမှန်အသုံးပြုမှုမြင်ကွင်းကိုအောက်ပါအတိုင်းဖြစ်သည် -
$mysqli = new mysqli("localhost", "user", "password", "database");
$query = "CALL complex_procedure(); SELECT * FROM another_table;";
if ($mysqli->multi_query($query)) {
do {
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$result->free();
}
} while ($mysqli->next_result());
}
ဤဥပမာတွင် Next_Result () ရလဒ်မျိုးစုံအကြားပြောင်းရန်အတွက်တာ 0 န်ရှိသည်။
အဆင်ပြေပေမယ့် Next_result () ကိုအသုံးပြုခြင်းသည်အချို့သောကြောင့်အချို့ကိုဖုံးကွယ်ထားသည်။
အကယ်. စုံစမ်းမှုမအောင်မြင်ပါက Next_result () သည် ခြွင်းချက် တစ်ခုသို့မချမိပါက, ထို့အပြင်သင်ယခင်ရလဒ်ကိုမသန့်ရှင်းပါက ( စတိုးနှင့်) နှင့်အခမဲ့ () နှင့် အခမဲ့ () ) နှင့်အခမဲ့ ()), နောက်ဆက်တွဲ () သည် မအောင်မြင်ပါ။
အရင်းအမြစ်များကိုဖြန့်ချိရန်ပျက်ကွက်ခြင်းသည်အထူးသဖြင့်တစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းပတ်ဝန်းကျင်တွင်မှတ်ဥာဏ်ပြ problems နာများကိုမှန်ကန်စွာဖြစ်စေနိုင်သည်။
Multi-study လုပ်ခြင်းနည်းလမ်းအပြောင်းအလဲသည်များသောအားဖြင့်ကြာရှည်စွာတည်ရှိပြီးထိန်းသိမ်းရန်ခက်ခဲသည်။ Debug လုပ်ရန်လည်းခက်ခဲသည်။
PDO သည် Multi-statement query ၏ရလဒ်ပြုပြင်ခြင်းနည်းလမ်းကိုတိုက်ရိုက်မထောက်ပံ့ပါ။ PDO :: Exec () execute () ကို သုံး. ထုတ်ပြန်ချက်များစွာကိုသင်လုပ်ဆောင်နိုင်သော်လည်း MySQLI :: Next_Result () ကဲ့သို့သောရလဒ်မျိုးစုံကိုသင်မကိုင်တွယ်နိုင်ပါ။
ဤတွင်အဓိကကွဲပြားခြားနားမှုအချို့မှာ -
သီးခြားထင်ရှားသော | MySQLI ( Next_Result ()) ) | ပန်ကေ |
---|---|---|
Multi-statement query ကိုထောက်ပံ့သည် | ဟုတ်ကဲ့ | ဟုတ်ကဲ့ (ကန့်သတ်ချက်) |
မျိုးစုံရလဒ်အစုံဖြစ်စဉ်ကို | ဟုတ်ကဲ့ | မဟုတ် |
ခြွင်းချက်ကိုင်တွယ်ယန္တရား | အားနည်းသော | ပိုမိုအားကောင်းသည့် (PoOCOECTICTICD ယူဆချက်မှတဆင့်) |
ရိုးရှင်းလွယ်ကူခြင်းနှင့်လုံခြုံရေး | နျိမ့် | ပိုမိုမြင့်သော |
parameter သည်စည်းမျဉ်းပံ့ပိုးမှု | ဟုတ်ကဲ့ | ဟုတ်ကဲ့ |
အကယ်. သင်၏လျှောက်လွှာသည်ရလဒ်မျိုးစုံကိုလုပ်ဆောင်ရန်လိုအပ်ပါက MySQLI သည် ပို. ရိုးရှင်းသောရွေးချယ်မှုဖြစ်သည်။ သို့သော်၎င်းကိုရှောင်ရှားနိုင်ပါက PDO ကိုအသုံးပြုခြင်းသည်ပိုမိုကောင်းမွန်သောလုံခြုံရေးနှင့် Code ကိုထိန်းသိမ်းမှုကိုဖြစ်ပေါ်စေလိမ့်မည်။
Multi_query () ကို အသုံးပြုခြင်းကိုရှောင်ရှားရန်ကြိုးစားပါ။
$stmt1 = $pdo->prepare("CALL complex_procedure()");
$stmt1->execute();
$stmt2 = $pdo->prepare("SELECT * FROM another_table");
$stmt2->execute();
$data = $stmt2->fetchAll(PDO::FETCH_ASSOC);
ခေတ်သစ် PHP မူဘောင်များသည်ဒေတာဘေ့စ် 0 င်ရောက်ရန်ပိုမိုကြော့ရှင်းသော encapsulation method ကိုပေးသည်။ ဥပမာအားဖြင့် Laravel ၏ eloquent Orm သည် Multi-stire querying ကိုမပံ့ပိုးနိုင်ပါ။
အကယ်. ရလဒ်များကိုအမှန်တကယ်လိုအပ်ပါကဈေးနှုန်းကိုသိုလှောင်ထားသည့်လုပ်ထုံးလုပ်နည်းတစ်ခုတွင်ရေးရန်အကြံပြုသည် ။
MySQLI :: Next_Result () သည် ရလဒ်အချည်းနှီးဖြစ်ရန်အတွက်စွမ်းအင်ထုတ်လုပ်မှုကိုပေးသော်လည်း၎င်း၏ရှုပ်ထွေးမှုနှင့်ပြ problems နာများကိုလျစ်လျူရှု။ မရပါ။ စီးပွားရေးဆိုင်ရာယုတ္တိဗေဒတွင်၎င်းကိုတိုက်ရိုက်မှီခိုခြင်းထက်ပိုမိုရှင်းလင်းပါ။ PDO သို့မဟုတ် ORM မူဘောင်ကို သုံး. စုံစမ်းမှုတစ်ခုတည်းကိုအသုံးပြုခြင်းကဲ့သို့သော ပိုမို. ထိန်းသိမ်းထားနိုင်သည့်အခြားရွေးချယ်စရာများ။ Next_Result () ကို တကယ်လိုအပ်မှသာသတိထားသင့်သည်။
?? အကြံပြုချက်များ - အကယ်. သင်သည်ထုတ်လုပ်မှုပတ် 0 န်းကျင်တွင်ဖော်ပြထားသောစုံစမ်းမှုကိုအသုံးပြုပါကသင့်လျော်သောဒေတာဘေ့စ်ခွင့်ပြုချက်များနှင့် parameter များအားဖြည့်ဆည်းပေးနိုင်ပါသလား။
သင်္ကေတဥပမာကိုစမ်းသပ်ရန်သင်၏ဖွံ့ဖြိုးရေးပတ် 0 န်းကျင်သို့အထက်ပါကုဒ်များကိုဖြန့်ဝေနိုင်ပါသည်။ ဥပမာ - https://gitbox.net/test-db-script.php ။