PHP တွင်ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် MySQLI Extensions ကိုအသုံးပြုသောအခါ MySQLI_STMT :: free_result () ကိုဖယ်ရှားရန်လိုအပ်ပါသည်။ သို့သော်အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင် MySQLI_STMT :: free_result အမှား "free_result error" အဘယ်သူမျှမရလဒ် "၏ပြ problem နာကိုကြုံတွေ့ရနိုင်သည်။ ဤဆောင်းပါးသည်ဤပြ problem နာနှင့်၎င်း၏ဖြေရှင်းချက်များ၏ဘုံအကြောင်းများကိုအသေးစိတ်လေ့လာသုံးသပ်လိမ့်မည်။
MySQLI_STMT :: free_result () သည် MySQLI extension ၏ query ရလဒ်ကိုဖြန့်ချိရန် MySQLI extension တွင်နည်းလမ်းဖြစ်သည်။ များသောအားဖြင့် Selection Query ကိုအကောင်အထည်ဖော်ပြီးနောက်ရလဒ်ကိုမလိုအပ်တော့ပါကဤနည်းလမ်းကိုဖုန်းခေါ်ဆိုခြင်းနှင့်သယံဇာတသုံးစွဲမှုကိုဖယ်ရှားခြင်းနှင့်သယံဇာတသုံးစွဲမှုကိုလျှော့ချနိုင်သည်။
ဥပမာအားဖြင့်:
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $userId);
$stmt->execute();
$stmt->store_result(); // ရလဒ်များကို
// ဒေတာအပြောင်းအလဲနဲ့ဒီအချိန်မှာဖျော်ဖြေနိုင်ပါတယ်...
$stmt->free_result(); // ရလဒ်ကိုလွှတ်ပေးရန်
free_result () ဟုခေါ်သောအခါ "ရလဒ်အနေဖြင့်အဘယ်သူမျှမရလဒ်" အမှားများကိုပုံမှန်အားဖြင့်ဖြစ်ပေါ်လေ့ရှိသည်, ပရိုဂရမ်သည်စုံစမ်းမှုစစ်ဆင်ရေးတစ်ခုမဟုတ်ပါ, သို့မဟုတ်စုံစမ်းမှုသည်ရလဒ်ကိုမပြန်ပါ။ အထူးသဖြင့်အမှားဆိုသည်မှာ Free_result () နည်းလမ်းသည်ရလဒ်အနေဖြင့်ရလဒ်ကိုလွတ်မြောက်ရန်ကြိုးစားသည်။
Query အမျိုးအစားမတိုက်ဆိုင် :
Non-select non-select non-selection အမျိုးအစားကို (ဥပမာမွမ်းမံခြင်း, ဖျက်ခြင်း, ဖျက်ခြင်းစသည်) ကိုအကောင်အထည်ဖော်လျှင်ဤမေးမြန်းချက်များသည် ရလဒ်ကို မထုတ်လုပ်နိုင်ပါ။
ဖြေရှင်းချက် -
Select query ပြီးနောက်သာ free_result () ကို သာခေါ်ပါ။
$stmt = $mysqli->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email);
$stmt->execute();
// မခေါ်နဲ့ free_result(),အဘယ်သူမျှမရလဒ်အစုမြားရှိလို့
Store_Result () သို့မဟုတ် bind_result () ကိုမခေါ်ပါ ။
Select မေးမြန်းမှုကိုအကောင်အထည်ဖော်ပြီးနောက်ရလဒ်ကို Store_result () သို့မဟုတ် bind_result () ဟုခေါ်သောမှသာထုတ်လုပ်လိမ့်မည်။ အကယ်. free_result () ကိုရလဒ်အနေဖြင့်ထုတ်ပေးခြင်းမရှိဘဲဟုခေါ်ပါကအမှားတစ်ခုထုတ်ပြန်လိမ့်မည်။
ဖြေရှင်းချက် -
free_result () ()) မခေါ်မီ Store_Result () သို့မဟုတ် bind_result () ကို ခေါ်ပါ။
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $userId);
$stmt->execute();
$stmt->store_result(); // ရလဒ် set ကိုသိုလှောင်ထားကြောင်းသေချာပါစေ
$stmt->free_result(); // ယခုခေါ်ဆိုရန်လုံခြုံ
အဆိုပါစုံစမ်းမှုအောင်မြင်စွာကွပ်မျက်ခံရခြင်းမခံခဲ့ရ :
အကယ်. SQL query ကိုအချို့သောအကြောင်းပြချက်များအတွက်အောင်မြင်စွာကွပ်မျက်ခံရပါက (syntax အမှားအယွင်းများ, ဆက်သွယ်မှုပြ problems နာများစသဖြင့်) အနေဖြင့်ပြန်လည်ထူထောင်ရန်ရလဒ်များမရှိသေးပါ ။
ဖြေရှင်းချက် -
SQL query ကိုအောင်မြင်စွာကွပ်မျက်ခံရပြီး free_result () ကိုခေါ်ပါ။ ဒီပြ problem နာကိုအောင်မြင်စွာကွပ်မျက်ခံရခြင်းရှိမရှိစစ်ဆေးခြင်းအားဖြင့်ဤပြ problem နာကိုရှောင်ရှားနိုင်သည်။
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if ($stmt === false) {
die('MySQL prepare failed: ' . $mysqli->error);
}
$stmt->bind_param("i", $userId);
$stmt->execute();
if ($stmt->affected_rows > 0) {
$stmt->store_result();
$stmt->free_result();
}
ကြိုတင်ကြေငြာချက်ကိုအနီးကပ် :
အကယ်. စုံစမ်းမှုကြေညာချက်ကိုကြိုတင်မဲခြင်း ( $ stmt-> အနီးကပ် ()) ကိုမပြုလုပ်မီ ($ stmt-> အနီးကပ် () ) ကို မစစ်ဆေးမီ,
ဖြေရှင်းချက် -
စုံစမ်းမှုအပြောင်းအလဲနဲ့ပြီးဆုံးပြီးနောက်ကြေညာချက်ကိုပိတ်ရန်သေချာပါစေ။
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $userId);
$stmt->execute();
$stmt->store_result(); // 必须先ရလဒ်များကို
$stmt->free_result(); // ထိုအခါရလဒ်များကိုဖြန့်ချိနိုင်ပါသည်
$stmt->close(); // နောက်ဆုံးပိတ်ပစ်
အဆိုပါစုံစမ်းမှုသည်အချည်းနှီးသောရလဒ်အစုတခုကိုပြန်လည်ရောက်ရှိသည် ။
Selection မေးမြန်းမှုသည်ရလဒ်များကိုမပြန်ပါက (ဥပမာ, မေးမြန်းခြင်းအခြေအနေနှင့်မကိုက်ညီပါ) ကိုခေါ်ဆိုပါက Free_result () ကို ခေါ်ဆိုခြင်းသည်အမှားအယွင်းတစ်ခုသို့မဟုတ်ပတ် 0 န်းကျင်များ၌မကိုက်ညီပါ။ ၎င်းသည်အမှားတစ်ခု၏တိုက်ရိုက်အကြောင်းရင်းမဟုတ်သော်လည်းတစ်ခါတစ်ရံအခြားသောမမျှော်လင့်သောပြ problems နာများကိုဖြစ်ပေါ်စေနိုင်သည်။
ဖြေရှင်းချက် -
query query_result () မခေါ်မီအချက်အလက်များပြန်ပို့ခြင်းရှိမရှိစစ်ဆေးပါ။
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $userId);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) {
// ရလဒ်ရှိပါတယ်
$stmt->free_result();
} else {
echo "ရလဒ်မရှိပါ";
}
MySQLI_STMT :: free_result error "ရလဒ်အနေဖြင့်" ရလဒ်အနေဖြင့်ရလဒ်အနေ ဖြင့် ရလဒ် အနေဖြင့်ရလဒ်ကိုပြန်လည်မပြန်ပါ ။ ထိုကဲ့သို့သောအမှားအယွင်းများကိုရှောင်ရှားရန် developer များကအောက်ပါအချက်များကိုဂရုပြုသင့်သည် -
Select query ပြီးနောက်သာ free_result () ကို သာခေါ်ပါ။
free_result ( ) မခေါ်မီစတိုး ( ) သို့မဟုတ် bind_result () ကို သေချာစွာလုပ်ဆောင်ရန်သေချာပါစေ။
SQL query ကိုအောင်မြင်စွာကွပ်မျက်ခြင်းရှိမရှိစစ်ဆေးပါ။
ကြေညာချက်ကိုပိတ်မတိုင်မီစစ်ဆင်ရေးအားလုံးကိုဖြည့်စွက်။
အထက်ပါနည်းလမ်းများနှင့်နည်းစနစ်များမှတဆင့်ဤအမှားကိုထိရောက်စွာရှောင်ရှားနိုင်ပြီးဒေတာဘေ့စ်လုပ်ငန်းကိုချောချောမွေ့မွေ့ကာကွယ်နိုင်သည်။