အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်အထူးသဖြင့် MySQL Multi-query function ကိုအသုံးပြုသောအခါရလဒ်မျိုးစုံပြုလုပ်ရန်လိုအပ်သည့်အခြေအနေများကိုသင်မကြာခဏကြုံတွေ့ရလေ့ရှိသည်။ စည်းလုံးညီညွတ်သောလုပ်ဆောင်မှုနည်းလမ်းမရှိပါက နောက်တစ်ခါ Next_result () နှင့် store_result () ကို ကိုယ်တိုင်ခေါ်ဆိုပါကအချိန်တိုင်းသည်ဒုက်ခဆင်းရဲခြင်းသာမဟုတ်ဘဲအမှားအယွင်းများကိုလည်းကျရောက်စေနိုင်သည်။
Code ကိုပိုပြီးကြော့ရှင်းပြီးကြံ့ခိုင်အောင်ပြုလုပ်ရန်ကျွန်ုပ်တို့သည်ယေဘူယျ function ကို oncapsulate နှင့်ရလဒ်အားလုံးကိုအလိုအလျောက်လုပ်ဆောင်နိုင်သည်။ နောက်တစ်ခုကမင်းကိုဘယ်လိုလုပ်ရမလဲဆိုတာကိုဖြတ်ပြီးမင်းကိုခေါ်သွားမှာပါ။
MySQLI ကို မေးမြန်းသည့်အခါ (I.E. SQL ထုတ်ပြန်ချက်များကိုတစ်ပြိုင်နက်တည်းပေးပို့ခြင်း) ကိုအသုံးပြုသည့်အခါ 1 ခုစီသည်ရလဒ်အစုအဝေးတစ်ခုနှင့်ကိုက်ညီသည်။ Store_Result () သည်လက်ရှိရလဒ်မှအချက်အလက်များကိုထုတ်ယူရန်တာ 0 န် ယူရန်အတွက် Next_result () ကို အသုံးပြုပါ။
အကယ်. ဤရလဒ်အစုံမှန်ကန်စွာလုပ်ဆောင်ခြင်းမရှိပါကဆက်သွယ်မှုခြွင်းချက်များသို့မဟုတ်နောက်မေးခွန်းတစ်ခုမအောင်မြင်ရန်လွယ်ကူသည်။ ထို့ကြောင့် ရလဒ်အားလုံးကိုသန့်ရှင်းရေးလုပ်ရန်အလွန်အရေးကြီးသည် ။
ရလဒ်အားလုံး၏လုပ်ဆောင်မှုများအားလုံး၏လုပ်ဆောင်မှုများကိုပြန်လည်ပြုပြင်ရန်နှင့်အချက်အလက်အားလုံးကိုပြန်လည်ထည့်သွင်းသည့် 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();
?>
ရလဒ်ကိုဖြန့်ချိရန်အရင်းအမြစ်များကိုအချိန်မီသတ်မှတ်ရန်အတွက်သတ်မှတ်ထားသည် ။
အမှားရှာဖွေခြင်း - Multi_Query () သို့မဟုတ် သိုလှောင်ခြင်း အမှားအယွင်းတစ်ခုဖြစ်ပါက,
ရလဒ်အလုံးစုံမပါဘဲစစ်ဆင်ရေးကိုလိုက်လျောညီထွေဖြစ်အောင်လုပ်ခြင်း - မွမ်းမံခြင်း , ထည့်သွင်းခြင်း , ဖျက်ခြင်း နှင့်အခြားထုတ်ပြန်ချက်များသည်ရလဒ်ကိုမပြန်ပါ။
ရလဒ်အစုကိုစာဝှက်ခြင်းနှင့်ပြုပြင်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည် Code ကိုပိုမိုတိကျမှုပြုလုပ်နိုင်ရုံသာမက MySQL ဆက်သွယ်မှုပရမ်းပတာ၏ပြ problem နာကိုထိထိရောက်ရောက်ရှောင်ရှားနိုင်သည်။ သင်၏စီမံကိန်းသည် SQL Queries မျိုးစုံကိုမကြာခဏကိုင်တွယ်ရန်လိုအပ်ပါကစံသတ်မှတ်ထားသော encapsulation များအတွက်အလားတူနည်းလမ်းကိုအသုံးပြုရန်အထူးအကြံပြုလိုပါသည်။
အကယ်. သင်သည် multi-queries များနှင့်ပေါင်းစပ်ခြင်းကဲ့သို့သောအဆင့်မီဘက်စုံအသုံးပြုမှုများအကြောင်းပိုမိုသိရှိလိုပါကသို့မဟုတ်ထိုကဲ့သို့သော encapsulation များကိုကြီးမားသောစီမံကိန်းများတွင်မည်သို့ပေါင်းစည်းရမည်နည်း။ https://gitbox.net ! ??