သိမ်းပိုက်ထားသောလုပ်ထုံးလုပ်နည်းများကိုခေါ်ဆိုခြင်းသည် MySQL databases များကို အသုံးပြု. PHP ကို အသုံးပြု. ဒေတာဘေ့စ်အဆင့်တွင်ရှုပ်ထွေးသောစီးပွားရေးယုတ္တိဗေဒကိုလိုက်နာလိုသောအခါ PHP ကိုအသုံးပြုသောအခါ PHP ကိုအသုံးပြုသောအခါအလေ့အကျင့်တစ်ခုဖြစ်သည်။ သို့သော် developer များစွာသည်သိုလှောင်ထားသောလုပ်ထုံးလုပ်နည်းများကို ** output parameters များနှင့်ခေါ်ဆိုသည့်အခါ output parameter တန်ဖိုးကိုဖတ်နိုင်သည့်အခြေအနေများကိုမဖတ်နိုင်သည့်အခြေအနေများမကြာခဏကြုံတွေ့ရလေ့ရှိသည်။
အဓိကအချက်များအနက်မှတစ်ခုမှာ Next_result () အသုံးပြုခြင်းဖြစ်သည်။ ဤဆောင်းပါးသည်အဘယ်ကြောင့်ဤ function ကိုခေါ်ရန်လိုအပ်ကြောင်းနှင့်အဘယ်ကြောင့်ဤ function ကိုခေါ်ရန်လိုအပ်ကြောင်းနှင့်သိုလှောင်ထားသည့်လုပ်ထုံးလုပ်နည်းများ၏ output parameters တွေကိုဘယ်လိုမှန်ကန်စွာဖတ်ရှုဖို့ဘယ်လိုအသေးစိတ်ရှင်းပြပါလိမ့်မယ်။
MySQLI Driver ကိုအသုံးပြုသောသိမ်းဆည်းထားသောလုပ်ထုံးလုပ်နည်း ကို ပြန်လည်ရယူရန်အတွက်သိုလှောင်ထားသည့်လုပ်ထုံးလုပ်နည်းများကိုခေါ်ယူရန် (ဥပမာ ရွေးချယ်မှု နှင့် output parameterers နှစ်ခုလုံးကဲ့သို့) MySQL သည်ဒေတာများကို "ရလဒ်အစုအဝေး" ပုံစံဖြင့်ပြန်ပို့သည်။ Next_result () နည်းလမ်းကို MySQLI ယာဉ်မောင်းသည်နောက်ရလဒ်ကိုဖတ်ရန်ပြင်ဆင်ရန်ပြင်ဆင်ရန်အသုံးပြုသည်။
အကယ်. Next_result () ကိုအတိအလင်းဟုအတိအလင်းမခေါ်ပါ။ ရလဒ်အားလုံးသည်ဖြတ်သန်းသွားပါကအချို့သောဒေတာဘေ့စ်ရလဒ်များ (ဥပမာ output parameters များသို့မဟုတ်နောက်ဆုံးရလဒ်အစုအဖြစ်) လက်လှမ်းမမီနိုင်ပါ။
Input Parameter နှင့် output parameter သည်ရိုးရှင်းသော MySQL သိုလှောင်ထားသည့်လုပ်ထုံးလုပ်နည်းတစ်ခုကိုအရင်ကြည့်ကြပါစို့။
DELIMITER $$
CREATE PROCEDURE get_user_email(IN user_id INT, OUT email VARCHAR(255))
BEGIN
SELECT user_email INTO email FROM users WHERE id = user_id;
END $$
DELIMITER ;
ဤသိုလှောင်ထားသည့်လုပ်ထုံးလုပ်နည်းသည် User ID ပေါ်တွင် အခြေခံ. ၎င်း၏စာတိုက်ပုံးကိုမေးမြန်းပြီး၎င်းကို parameter သည်မှတစ်ဆင့်ပြန်ပို့သည်။
<?php
$mysqli = new mysqli("localhost", "username", "password", "your_database");
// ဆက်သွယ်မှုကိုစစ်ဆေးပါ
if ($mysqli->connect_error) {
die("ဆက်သွယ်မှုမအောင်မြင်ပါ: " . $mysqli->connect_error);
}
// 1. တည်ဆောက်သည် OUT parameter variable တွေကို
$mysqli->query("SET @email = ''");
// 2. သိုလှောင်လုပ်ထုံးလုပ်နည်းများကိုခေါ်ပါ
$mysqli->query("CALL get_user_email(1, @email)");
// 3. အသုံးပြုရပါမည် next_result() ရလဒ် set ကိုရှင်း
while ($mysqli->more_results()) {
$mysqli->next_result();
$result = $mysqli->store_result();
if ($result) {
$result->free();
}
}
// 4. ရယူ OUT တေးရေး
$result = $mysqli->query("SELECT @email AS user_email");
$row = $result->fetch_assoc();
echo "အသုံးပြုသူရဲ့အီးမေးလ်လိပ်စာက: " . $row['user_email'];
$mysqli->close();
?>
ခေါ်ဆိုမှု ကြေငြာချက်ကိုခေါ်ဆိုပြီးနောက် MySQL သည်အမှန်တကယ်သွယ်ဝိုက်သောရလဒ်များသို့မဟုတ်ထိုထက်မကသောရလဒ်များကိုပြန်ပို့နိုင်သည်။ အကယ်. Next_result () သည် ဤရလဒ်အစုံများကိုရှင်းလင်းရန်မသုံးပါကနောက်ဆက်တွဲမေးမြန်းချက်များ (ဥပမာ Select @ OEMAIL ကဲ့သို့သော) ကိုပိတ်ဆို့ခြင်းသို့မဟုတ်မအောင်မြင်နိုင်ပါ။
Developer တချို့ developer များက "Read output parametersters များသည်အချည်းနှီး" ၏ပြ problem နာကိုကြုံတွေ့ရလိမ့်မည်။ စင်စစ်အားဖြင့်သိုလှောင်ထားသည့်လုပ်ထုံးလုပ်နည်းကိုအောင်မြင်စွာကွပ်မျက်ခံရခြင်းမရှိသေးသော်လည်းယခင်ရလဒ်ကိုရှင်းလင်းခြင်းမရှိသေးပါ။
အကယ်. သင်သည်ကြိုတင်အသုံးချထားသောထုတ်ပြန်ချက်များကိုအသုံးပြုနေပါကအလားတူယုတ္တိဗေဒကိုလည်းသုံးနိုင်သည်။
$stmt = $mysqli->prepare("CALL get_user_email(?, @email)");
$stmt->bind_param("i", $userId);
$userId = 1;
$stmt->execute();
// အားလုံးရလဒ်အစုံတက်သန့်ရှင်းရေး
do {
if ($result = $stmt->get_result()) {
$result->free();
}
} while ($stmt->more_results() && $stmt->next_result());
// ရယူ输出တေးရေး
$result = $mysqli->query("SELECT @email AS user_email");
$row = $result->fetch_assoc();
echo "အသုံးပြုသူရဲ့အီးမေးလ်လိပ်စာက: " . $row['user_email'];
သိုလှောင်ထားသောလုပ်ထုံးလုပ်နည်းများကိုသင်ခေါ်ဆိုသည့်အခါ, output parameter များကိုအသုံးပြုသည်ဖြစ်စေ, ရလဒ်အစုများမခွဲခြားဘဲရလဒ်ကောင်းများနှင့်ရလဒ်ကောင်းများမခွဲခြားဘဲ ရလဒ်ကောင်းများမှတစ်ဆင့် Veakesult () ကို ခေါ်ယူရန်အတွက်ဖုန်းခေါ်ဆိုခြင်းကိုအသုံးပြုသင့်သည် ။
၎င်းသည်ကောင်းမွန်သောအလေ့အကျင့်တစ်ခုသာမကဘဲ parameters များကိုမှန်ကန်စွာဖတ်နိုင်အောင်သေချာစေရန်လိုအပ်ချက်တစ်ခုလည်းဖြစ်သည်။ ဤအချက်ကိုစိတ်ထဲထားရှိခြင်းက "ရလဒ်များမဖတ်သည့်" ပြ problems နာများစွာကိုခေါင်းကိုက်ခြင်းကိုရှောင်ရှားရန်ကူညီနိုင်သည်။
သိုလှောင်ထားသည့်လုပ်ထုံးလုပ်နည်းများခေါ်ဆိုမှုများအတွက်ပိုမိုကောင်းမွန်သောအလေ့အကျင့်များပိုမိုများပြားလာသည်။ ကျွန်ုပ်တို့၏ဖွံ့ဖြိုးရေးလမ်းညွှန်ကိုသင် https://gitbox.net/docs/mysql/stored-procedureed