ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် PHP ၏ MySQLI extension ကိုအသုံးပြုသောအခါလုံခြုံရေးနှင့်ကွပ်မျက်မှုစွမ်းဆောင်နိုင်မှုတိုးတက်စေရန်ကြိုတင်သတ်မှတ်ထားသည့်ထုတ်ပြန်ချက်များကိုမကြာခဏအသုံးပြုလေ့ရှိသည်။ MySQLI :: stmt_init () သည် Preprocessing statles ်ဌာန်းချက်များကိုဖန်တီးရန်အတွက်ဘုံအစမှတ်ဖြစ်သည်, သို့သော်သင်ထိုကဲ့သို့သောအခြေအနေမျိုးကိုတွေ့ဖူးပါသလား။
ကြေငြာချက်ကို stmt_init () ပါ 0 င ် သည့်အရာဝတ်ထုကိုသင်စတင်ခဲ့သည်။
ဤ "တိတ်ဆိတ်ပျက်ကွက်" ပြ problem နာအလွန်လျှို့ဝှက်ချက်ဖြစ်ပါတယ်။ ယနေ့ကျွန်ုပ်တို့သည်ဘုံအကြောင်းအရင်းကိုခွဲခြမ်းစိတ်ဖြာပြီးပြ the နာကိုလျင်မြန်စွာရှာဖွေရန်နမူနာကုဒ်ကိုပူးတွဲပါမည်။
အောက်ပါတို့နှင့်ဆင်တူသည့်ကုဒ်ကိုသင်ရေးချေနိုင်သည်။
<?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 လုပ်ပြီးရှင်းလင်းသောအမှားအယွင်းများကိုသတင်းပို့လိမ့်မည်မဟုတ်ပါ။ အဘယ်ကြောင့်ပြင်ဆင်ရန်အဘယ်ကြောင့်မသိရပါဘူး။
ပြင်ဆင်ရန် () ပြန်လည်ထူထောင်ခြင်း မှားယွင်းသောအယူမှား သည် ။
ဥပမာအားဖြင့်:
if (!$stmt->prepare("SELECT * FROM users WHERE email = ?")) {
die("Preprocessing မအောင်မြင်ပါ: " . $stmt->error); // သို့မဟုတ် $mysqli->error
}
သင်ကြိုးများကိုမဖြည့်ပါကပင်သေဆုံးသော SQL သည်ပြ problem နာဖြစ်နိုင်သည်။ ဥပမာအားဖြင့်:
$stmt->prepare("SELECT FROM users WHERE email = ?"); // ပျောက်ဆုံးလယ်ပြင်အမည်
ကြိုတင်ပြင်ဆင်မှု () ဤအချိန်တွင်မှားယွင်းသောပြန်လာလိမ့်မည်။
ပြင်ဆင်ခြင်း () နှင့် output ကို output ၏ပြန်လာတန်ဖိုးကိုစစ်ဆေးပါ။
if (!$stmt->prepare($sql)) {
die("Prepare ဆုံးရှုံး: " . $stmt->error);
}
လွယ်ကူသော debugging အတွက်အမှားအယွင်းပြုသည့်နည်းလမ်းကိုဖွင့်ပါ။
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
ဤဝါကျကိုထည့်ပြီးသောအခါ MySQLI အမှားများသည်ခြွင်းချက်များကိုအလိုအလျောက်ပစ်လိမ့်မည်။ ၎င်းသည်ဖွံ့ဖြိုးရေးအဆင့်တွင်ပြ problems နာများပြ problems နာများကိုဖြေရှင်းရန်အလွန်သင့်တော်သည်။
ချည်နှောင် ခြင်းကို ရှောင်ကြဉ် ပါ ။
$stmt = $mysqli->stmt_init();
if (!$stmt) {
die("stmt_init ဆုံးရှုံး: " . $mysqli->error);
}
နောက်ဆက်တွဲ () သို့မဟုတ် execute () လုပ်ဆောင်မှုများသည်မအောင်မြင်ပါက MySQLI :: stmt_init ကို အသုံးပြု. ကြေငြာချက် တစ်ခု ဖန်တီးပြီးနောက် အမှားအယွင်းများ ကိုသေချာစွာစစ်ဆေးပါ။ ဒီလိုမှမဟုတ်ရင် Code Logic ရဲ့ထင်ဟပ်ပြောင်ပြောင်တင်းတင်း "ထင်ယောင်ထင်မှားမှု" မှာမတည်ရှိတဲ့ပြ problems နာတွေကိုစစ်ဆေးဖို့အချိန်အများကြီးဖြုန်းတီးပစ်ပေမဲ့အမှန်တကယ်စစ်ဆင်ရေးမအောင်မြင်ပါ။
ထို့အပြင် SQL ကြေငြာချက်ကိုယ်တိုင်တွင် syntax အမှားများမရှိပါကလယ်ပြင်အမည်ကိုမှန်ကန်စွာစာလုံးပေါင်းသည်, ပြင်ဆင်ခြင်း ၏အောင်မြင်မှုကိုသေချာစေရန် parameters များကိုက်ညီမှုအရေအတွက်သည်လိုအပ်ချက်အားလုံးဖြစ်သည်။