PHP တွင် MySQLI_STMM :: ပြင်ဆင်မှုကြေငြာချက်တွင်ပြုလုပ်နိုင်သည့်အမှားသတင်းအချက်အလက်များကိုရရှိရန် $ အမှားကို အသုံးပြုသည်။ ဤအင်္ဂါရပ်သည်အလွန်အသုံး 0 င်သော်လည်း developer များစွာသည်လက်တွေ့ကျသောအပလီကေးရှင်းများတွင်တွေ့ရသောအမှားအယွင်းများကိုကြုံတွေ့ရနိုင်သည်။ ဤဆောင်းပါးသည်ဤအပင်ငါးမျိုးအမှားငါးမျိုးနှင့်၎င်းတို့ကိုမည်သို့ရှောင်ရှားရမည်နည်း။
မည်သည့် SQL မေးမြန်းမှုကိုမပြုလုပ်မီဒေတာဘေ့စ်ဆက်သွယ်မှုသည်မှန်ကန်ကြောင်းသေချာအောင်လုပ်ရမည်။ အကယ်. ကြေငြာချက်မချခင်ဒေတာဘေ့စ်ဆက်သွယ်မှုသည်မအောင်မြင်ပါက MySQLI_STMT :: $ အမှားသည် အမှားအယွင်းကိုမှန်ကန်စွာပြန်ပို့လိမ့်မည်မဟုတ်ပါ။
ဒေတာဘေ့စ်ဆက်သွယ်မှုကို MySQLI_Connect () သို့မဟုတ် MySQLI () အသစ် () သို့မဟုတ်အသစ် MySQLI () ကို အသုံးပြု. ဆက်သွယ်မှုကိုမလုပ်ဆောင်မီအောင်မြင်မှုရှိမရှိစစ်ဆေးပါ။ ဤတွင်ရိုးရှင်းသောဥပမာတစ်ခုဖြစ်သည်။
<?php
// ဒေတာဘေ့စ်ကိုဆက်သွယ်ပါ
$mysqli = new mysqli('localhost', 'username', 'password', 'database_name');
// ဆက်သွယ်မှုကိုစစ်ဆေးပါ
if ($mysqli->connect_error) {
die("ဆက်သွယ်မှုမအောင်မြင်ပါ: " . $mysqli->connect_error);
}
// ကြိုတင်ကြေငြာချက်တစ်ခုဖန်တီးပါ
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if ($stmt === false) {
die("Preprocessing Statement ဖန်တီးမှုမအောင်မြင်ပါ: " . $mysqli->error);
}
?>
ဤနည်းဖြင့်ဆက်သွယ်မှုပျက်ကွက်သည့်အခါမှန်ကန်သောအမှားအယွင်းကိုသင်ဖမ်းယူနိုင်သည်။
preprocessing ထုတ်ပြန်ချက်များကိုအသုံးပြုသောအခါ MySQLI_STMT :: $ အမှားသည် သင်သတ်မှတ်ထားသည့်အမှားကိုမှန်ကန်စွာမဖြည့်ပါကသင်မျှော်လင့်ထားသည့်အမှားကိုမပြန်နိုင်ပါ။ Bind_param () ကို အသုံးပြုသောအခါဤအမှားသည်မကြာခဏဖြစ်ပေါ်လေ့ရှိပြီးမှားယွင်းသော parameter type အမျိုးအစားသို့မဟုတ်အရေအတွက်ကိုဖြတ်သန်းသောအခါမကြာခဏဖြစ်ပေါ်လေ့ရှိသည်။
Parameter type ကို bind_param သို့သွားရန်သေချာအောင်လုပ်ပါ။ ဥပမာအားဖြင့်, s ဖြင့် strings ကို s ကို များအတွက်အသုံးပြုသည်, ကိန်းဂဏန်းများအတွက်အသုံးပြုကြသည်, double-precision-point နံပါတ်များကို d အတွက်အသုံးပြုကြသည်။
<?php
// ငါတို့သုံးချင်တာဆိုပါစို့ ID စုံစမ်းမှုတစ်ခုလုပ်ဆောင်ပါ
$id = 1;
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id); // ဒီမှာအမျိုးအစားက "i" ကိန်းဂဏန်းများကိုဖော်ပြသည်
if ($stmt->execute()) {
// အောင်မြင်စွာကွပ်မျက်ခံရ
$result = $stmt->get_result();
} else {
// အမှားကိုင်တွယ်
echo "အမှားသတင်းစကား: " . $stmt->error;
}
?>
ဤနည်းအားဖြင့် Bind_param () အမျိုးအစားများကိုအမျိုးအစားများသည်ထိုအမှားများကိုရှောင်ရှားနိုင်သည်။
အခြားဘုံအမှားတစ်ခုမှာ SQL query ကိုယ်နှိုက်သည် sql quertions သည် syntax ပြ issues နာများရှိပြီး,
SQL Query များကိုရေးသည့်အခါ syntax သည်မှန်ကန်ကြောင်းသေချာပါစေ။ Debug ကိုကူညီရန် PHP ၏ MySQLI_ERROR_ERROR_ERMMT :: ဤတွင်သာမန် SQL Error Errorge ဥပမာတစ်ခုမှာ -
<?php
$stmt = $mysqli->prepare("SELEC * FROM users WHERE id = ?");
if ($stmt === false) {
die("ကြေညာချက်ကိုပြင်ဆင်ရန်ပျက်ကွက်: " . $mysqli->error);
}
$stmt->bind_param("i", $id);
$stmt->execute();
?>
ဤနေရာတွင်အမှားအယွင်း ကို SELEC ဟု ရေးသားထားသောကြောင့်ဖြစ်သည်။ SQL ထုတ်ပြန်ချက်များသည် Syntax အမှားများကိုဖမ်းရန် SQL ထုတ်ပြန်ချက်များသည်အခမဲ့စာလုံးပေါင်းနှင့် MySQLI_ERGRORREROR () ကိုသုံးပါ။
ဒေတာဘေ့စ်တွင်ကွက်လပ်တွင်ဖိုင်အမျိုးအစားသည်အချက်အလက်အမျိုးအစားကိုမကိုက်ညီပါက MySQLI_STMT :: $ အမှားသည် သက်ဆိုင်ရာအမှားအယွင်းများကိုပြန်ပေးလိမ့်မည်။
ဒေတာအမျိုးအစားထည့်သွင်းခြင်းသို့မဟုတ်မေးမြန်းခြင်းသည်ဒေတာဘေ့စ်စားပွဲတွင်သတ်မှတ်ထားသောလယ်ကွင်းအမျိုးအစားနှင့်ကိုက်ညီကြောင်းသေချာပါစေ။ စားပွဲ၌ရှိသောကွက်လပ်သည် type int ၏ field ားသည် string ကိုဖြတ်သန်းပါက၎င်းသည်အမှားတစ်ခုဖြစ်ပေါ်စေနိုင်သည်။
<?php
$id = "string_instead_of_int";
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id); // ဤတွင်သင်တစ် ဦး ကိန်းဂဏန်းအမျိုးအစား pass သင့်ပါတယ် $id
$stmt->execute();
?>
ချည်နှောင်ထားသည့် parameters များသည်ဒေတာဘေ့စလယ်ကွင်းအမျိုးအစားနှင့်ကိုက်ညီကြောင်းသေချာပါစေ။
MySQLI_STMT :: $ အမှားသည် အမှားအယွင်းများအားလုံးကိုအလိုအလျောက်မဖမ်းနိုင်ပါ ။
ကြေညာချက်ကိုအကောင်အထည်ဖော်ပြီးနောက် execute () နည်းလမ်း၏ပြန်လာတန်ဖိုးကိုအမြဲတမ်းစစ်ဆေးပါ။ အကယ်. ပြန်လာတန်ဖိုးမှာ မှားယွင်း ပါကကွပ်မျက်မှုမအောင်မြင်ဟုဆိုလိုသည်။ MySQLI_STMT :: $ အမှားအယွင်းများရရန် $ အမှားကို သုံးနိုင်သည်။
<?php
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
if (!$stmt->execute()) {
echo "Execute အမှား: " . $stmt->error;
}
?>
ဤနည်းအားဖြင့်အမှားကိုချက်ချင်းမဖမ်းယူနိုင်သော်လည်းပြ problem နာကိုအချိန်မီရှာဖွေတွေ့ရှိနိုင်သည်။
MySQLI_STMM :: $ အမှား သည် PHP တွင် MySQL တွင် prem preprocessing statements အမှားများကိုဖမ်းရန်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်ပြီး၎င်းအားမှန်ကန်စွာအသုံးပြုသည်ကိုသေချာစေရန်, parametering connections, sql syntax အမှားအယွင်းများ, ဤအကောင်းဆုံးအလေ့အကျင့်များကိုလိုက်နာခြင်းအားဖြင့်သင်သည်ဤပြ problems နာများကိုထိရောက်စွာရှောင်ရှားနိုင်ပြီးသင်၏လျှောက်လွှာကိုပိုမိုအားကောင်းစေနိုင်သည်။