လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> stmtt_init ကိုအသုံးပြုပြီးနောက်တွင်စစ်ဆင်ရေးသည်အမှားအယွင်းများမရှိဘဲမအောင်မြင်ပါ။ အကြောင်းပြချက်ကဒီမှာဖြစ်နိုင်သည်

stmtt_init ကိုအသုံးပြုပြီးနောက်တွင်စစ်ဆင်ရေးသည်အမှားအယွင်းများမရှိဘဲမအောင်မြင်ပါ။ အကြောင်းပြချက်ကဒီမှာဖြစ်နိုင်သည်

M66 2025-05-31

ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် PHP ၏ MySQLI extension ကိုအသုံးပြုသောအခါလုံခြုံရေးနှင့်ကွပ်မျက်မှုစွမ်းဆောင်နိုင်မှုတိုးတက်စေရန်ကြိုတင်သတ်မှတ်ထားသည့်ထုတ်ပြန်ချက်များကိုမကြာခဏအသုံးပြုလေ့ရှိသည်။ MySQLI :: stmt_init () သည် Preprocessing statles ်ဌာန်းချက်များကိုဖန်တီးရန်အတွက်ဘုံအစမှတ်ဖြစ်သည်, သို့သော်သင်ထိုကဲ့သို့သောအခြေအနေမျိုးကိုတွေ့ဖူးပါသလား။

ကြေငြာချက်ကို stmt_init () ပါ 0 င သည့်အရာဝတ်ထုကိုသင်စတင်ခဲ့သည်။

ဤ "တိတ်ဆိတ်ပျက်ကွက်" ပြ problem နာအလွန်လျှို့ဝှက်ချက်ဖြစ်ပါတယ်။ ယနေ့ကျွန်ုပ်တို့သည်ဘုံအကြောင်းအရင်းကိုခွဲခြမ်းစိတ်ဖြာပြီးပြ the နာကိုလျင်မြန်စွာရှာဖွေရန်နမူနာကုဒ်ကိုပူးတွဲပါမည်။

ပြ the နာမြင်ကွင်းကို restore

အောက်ပါတို့နှင့်ဆင်တူသည့်ကုဒ်ကိုသင်ရေးချေနိုင်သည်။

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    die("ဆက်သွယ်မှုမအောင်မြင်ပါ: " . $mysqli->connect_error);
}

$stmt = $mysqli->stmt_init();

if ($stmt->prepare("SELECT * FROM users WHERE email = ?")) {
    $email = "example@m66.net";
    $stmt->bind_param("s", $email);
    $stmt->execute();
    $result = $stmt->get_result();

    while ($row = $result->fetch_assoc()) {
        print_r($row);
    }

    $stmt->close();
} else {
    echo "ကြေညာချက်ကိုပြင်ဆင်ရန်ပျက်ကွက်";
}
$mysqli->close();
?>

မှန်ပါတယ် သို့သော် $ stmt-> ပြင်ဆင်ရန် () ပြင်ဆင်ခြင်း () ပြန်လည်ထူထောင်ရေး ကိုပြန်ပို့လျှင်, ပရိုဂရမ်သည်အောက်သို့ execute လုပ်ပြီးရှင်းလင်းသောအမှားအယွင်းများကိုသတင်းပို့လိမ့်မည်မဟုတ်ပါ။ အဘယ်ကြောင့်ပြင်ဆင်ရန်အဘယ်ကြောင့်မသိရပါဘူး။

Root အကြောင်းအရင်း - MySQL server မှပြန်လာသောအမှားကိုမပြပါ

ပြင်ဆင်ရန် () ပြန်လည်ထူထောင်ခြင်း မှားယွင်းသောအယူမှား သည်

ဥပမာအားဖြင့်:

 if (!$stmt->prepare("SELECT * FROM users WHERE email = ?")) {
    die("Preprocessing မအောင်မြင်ပါ: " . $stmt->error); // သို့မဟုတ် $mysqli->error
}

နောက်ထပ်ဘုံဘုံ pmall တစ်ခု: SQL ထုတ်ပြန်ချက်များတွင် syntax အမှားများပါ 0 င်သည်

သင်ကြိုးများကိုမဖြည့်ပါကပင်သေဆုံးသော SQL သည်ပြ problem နာဖြစ်နိုင်သည်။ ဥပမာအားဖြင့်:

 $stmt->prepare("SELECT FROM users WHERE email = ?"); // ပျောက်ဆုံးလယ်ပြင်အမည်

ကြိုတင်ပြင်ဆင်မှု () ဤအချိန်တွင်မှားယွင်းသောပြန်လာလိမ့်မည်။

အကောင်းဆုံးအလေ့အကျင့်အကြံပြုချက်များ

  1. ပြင်ဆင်ခြင်း () နှင့် output ကို output ၏ပြန်လာတန်ဖိုးကိုစစ်ဆေးပါ။

     if (!$stmt->prepare($sql)) {
        die("Prepare ဆုံးရှုံး: " . $stmt->error);
    }
    
  2. လွယ်ကူသော debugging အတွက်အမှားအယွင်းပြုသည့်နည်းလမ်းကိုဖွင့်ပါ။

     mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    

    ဤဝါကျကိုထည့်ပြီးသောအခါ MySQLI အမှားများသည်ခြွင်းချက်များကိုအလိုအလျောက်ပစ်လိမ့်မည်။ ၎င်းသည်ဖွံ့ဖြိုးရေးအဆင့်တွင်ပြ problems နာများပြ problems နာများကိုဖြေရှင်းရန်အလွန်သင့်တော်သည်။

  3. ချည်နှောင် ခြင်းကို ရှောင်ကြဉ် ပါ

     $stmt = $mysqli->stmt_init();
    if (!$stmt) {
        die("stmt_init ဆုံးရှုံး: " . $mysqli->error);
    }
    

အကျဉ်းချုပ်

နောက်ဆက်တွဲ () သို့မဟုတ် execute () လုပ်ဆောင်မှုများသည်မအောင်မြင်ပါက MySQLI :: stmt_init ကို အသုံးပြု. ကြေငြာချက် တစ်ခု ဖန်တီးပြီးနောက် အမှားအယွင်းများ ကိုသေချာစွာစစ်ဆေးပါ။ ဒီလိုမှမဟုတ်ရင် Code Logic ရဲ့ထင်ဟပ်ပြောင်ပြောင်တင်းတင်း "ထင်ယောင်ထင်မှားမှု" မှာမတည်ရှိတဲ့ပြ problems နာတွေကိုစစ်ဆေးဖို့အချိန်အများကြီးဖြုန်းတီးပစ်ပေမဲ့အမှန်တကယ်စစ်ဆင်ရေးမအောင်မြင်ပါ။

ထို့အပြင် SQL ကြေငြာချက်ကိုယ်တိုင်တွင် syntax အမှားများမရှိပါကလယ်ပြင်အမည်ကိုမှန်ကန်စွာစာလုံးပေါင်းသည်, ပြင်ဆင်ခြင်း ၏အောင်မြင်မှုကိုသေချာစေရန် parameters များကိုက်ညီမှုအရေအတွက်သည်လိုအပ်ချက်အားလုံးဖြစ်သည်။