PHP တွင် SQL Query များကို execute လုပ်ရန် MySQLI_STMMT ကို အသုံးပြုသောအခါ MySQLI_STMT :: အမှားတစ်ခုကြုံတွေ့ရသည်။ သို့သော် SQL ကြေငြာချက်သည်ပြ problem နာဖြစ်ပုံရသည်။ SQL ထုတ်ပြန်ချက်များသည်မှန်ကန်သည်ဟုထင်ရသည့်အတွက်ဤပြ problem နာသည် developer များနှင့်မကြာခဏရှုပ်ထွေးသော်လည်း PHP သည်အမှားတစ်ခုဖြစ်ကြောင်းဖော်ပြသည်။ ဒီနေ့ခေတ်မှာပဲ,
SQL Query များကိုသင်ကွပ်မျက်ခံရသည့်အခါအထူးသဖြင့် MySQLI_STMMT ကို အသုံးပြုသောအခါ SQL syntax သည် MySQL လိုအပ်ချက်များနှင့်အပြည့်အဝမလိုက်နာပါက MySQL သည်များသောအားဖြင့်အမှားတစ်ခုသို့ပြန်လာလိမ့်မည်။ သင်၏ SQL ကြေငြာချက်သည်မှန်ကန်သော်လည်းတစ်ခါတစ်ရံတွင်သွယ်ဝိုက်သောအက္ခရာများသို့မဟုတ်အသစ်များကဲ့သို့သောသွယ်ဝိုက်သောဇာတ်ကောင်များ (ဥပမာအပိုများသို့မဟုတ်အသစ်များ) ကိုမှန်ကန်စွာခွဲခြမ်းစိတ်ဖြာသောကြောင့်တစ်ခါတစ်ရံ၎င်းသည်အမှားတစ်ခုဖြစ်ပေါ်စေနိုင်သည်။
$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('s', $username);
if (!$stmt->execute()) {
echo "Error: " . $stmt->error;
}
ဤအချက်မှာ SQL ကြေငြာချက်သည်မျက်နှာပြင်ပေါ်တွင်မှန်ကန်ပုံရသည့်တိုင်, syntax ပြ problems နာများ (အပိုနေရာများသို့မဟုတ်မှားယွင်းသောခွဲထွက်သူများကဲ့သို့) သည် mysql mySQL သည်အမှားတစ်ခုဖြစ်စေနိုင်သည်။
MySQLI_STMT မှအမှားတစ်ခုကိုသင်တွေ့သောအခါ - $ အမှားတစ်ခုဖြစ်သော ပြ problem နာ၏အဓိကအကြောင်းရင်းသည် SQL ကြေငြာချက်တွင်မကျနိုင်သော်လည်းဒေတာဘေ့စ်ဆက်သွယ်မှုတွင် မူတည်. မရပါ။ ဒေတာဘေ့စ်ဆာဗာသည် Down သို့မဟုတ် Network ပြတ်တောက်သွားသောအခါ PHP ကိုဒေတာဘေ့စ်သို့မှန်ကန်စွာချိတ်ဆက်ရန်ပျက်ကွက်ခြင်းဖြစ်နိုင်သည်။
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
သင်၏ဒေတာဘေ့စ်ဆက်သွယ်မှုကိုမဖြေရှင်းနိုင်မီအောင်မြင်မှုသေချာအောင်လုပ်ပါ။ အကယ်. ဆက်သွယ်မှုမအောင်မြင်ပါက SQL ကြေငြာချက်သည်ပြ problem နာမရှိလျှင်ပင် $ အမှားသည် အမှားတစ်ခုဖြစ်လိမ့်မည်။
MySQLI_STMT ကို အသုံးပြုသောအခါ SQL Query တွင် placeholders များသို့ variable များကို carable လုပ်သားများကိုချည်နှောင်ရန်မကြာခဏလိုအပ်သည်။ မမှန်ကန်သော parameter သည်စည်းမျဉ်းစည်းကမ်းများသည် SQL ထုတ်ပြန်ချက်များကိုကျရှုံးစေနိုင်သည်။ ဥပမာအားဖြင့်, အကယ်. မှားယွင်းသော parameter type အမျိုးအစား (ဥပမာအားဖြင့်ကိန်းဂဏန်းတစ်ခုအနေဖြင့်ချည်နှောင်ခြင်းကဲ့သို့သော) သို့မဟုတ် parameters အရေအတွက်ကို sql placeholder နှင့်မကိုက်ညီပါကအမှားတစ်ခုဖြစ်သောအမှားတစ်ခုဖြစ်သောအမှားတစ်ခုဖြစ်သောအမှားတစ်ခုဖြစ်သည့်အမှားတစ်ခုဖြစ်သောအမှားတစ်ခုဖြစ်သောအမှားတစ်ခုဖြစ်သောအမှားတစ်ခုဖြစ်သောအမှားတစ်ခုဖြစ်လာပါလိမ့်မည်။
$sql = "SELECT * FROM users WHERE age > ?";
$stmt = $mysqli->prepare($sql);
$age = "30"; // မမှန်ကန်သော parameter သည်အမျိုးအစား,ဒါဟာကိန်းဂဏန်းဖြစ်သင့်သည်
$stmt->bind_param('i', $age);
if (!$stmt->execute()) {
echo "Error: " . $stmt->error;
}
ဤဥပမာတွင် $ age variable ကို string type ( 's' ) ကိုမှားယွင်းစွာခညျြနှောငျသည် ။ ဤအမျိုးအစားသည်မတိုက်ဆိုင်မှုသည် SQL Execution ကိုပျက်ကွက်စေလိမ့်မည်။
သင်ရှာဖွေမှုတစ်ခုပြုလုပ်ပြီးရလဒ်ကိုရရန်ကြိုးစားသောအခါ, သင်စုံစမ်းမှုအပြီးတွင်မှန်ကန်သောသတ်မှတ်ထားသည့်ရလဒ်ကိုမှန်ကန်စွာလုပ်ဆောင်ရန်မေ့နေနိုင်သည်။ အထူးသဖြင့် Select query query ကိုသုံးသောအခါ bind_result () သို့မဟုတ်အလားတူစစ်ဆင်ရေးများမရှိခြင်းသည်အမှားအယွင်းများဖြစ်ပေါ်စေလိမ့်မည်။
$sql = "SELECT * FROM users WHERE id = ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('i', $id);
$stmt->execute();
$stmt->bind_result($result);
$stmt->fetch();
အကယ် . ရလဒ်ကိုမှန်ကန်စွာဖြည့်စွက်ခြင်းသို့မဟုတ် ရယူခြင်း ကိုမှန်ကန်စွာခေါ်ဆိုပါက,
MySQL ၏ကွဲပြားခြားနားသောဗားရှင်းများသည်ကွဲပြားသော SQL လုပ်ဆောင်ချက်များကိုထောက်ပံ့သည်။ အကယ်. သင်၏ SQL ကြေငြာချက်သည်လက်ရှိဒေတာဘေ့စ်ဗားရှင်းတွင်မထောက်ပံ့သောအင်္ဂါရပ်များကိုအသုံးပြုသည်ဆိုပါက Database ဗားရှင်းသည်အသက်ကြီးလွန်းပါက၎င်းသည်ရှာဖွေမှုအမှားများကိုဖြစ်ပေါ်စေနိုင်သည်။
$sql = "CREATE TABLE IF NOT EXISTS new_table (id INT PRIMARY KEY)";
$stmt = $mysqli->prepare($sql);
if (!$stmt->execute()) {
echo "Error: " . $stmt->error;
}
အချို့သောအဟောင်း MySQL ဗားရှင်းများတွင် မတည်ရှိပါက syntax မတည်ရှိပါက syntax သည်အပြည့်အ 0 မထောက်ပံ့နိုင်ပါ။
MySQLI_STMT ကို သုံး. ပြ problems နာများရှိသည့်အခါ - $ အမှားအယွင်းများ နှင့် SQL ကြေငြာချက်သည်အမှားအယွင်းမရှိဟုထင်ရသည်, SQL ကြေညာချက်ကိုယ်တိုင်ကိုငြင်းပယ်ရန်မမြန်ပါနှင့်။ အထက်တွင်ဖော်ပြခဲ့သည့်အလားအလာရှိသောပြ problems နာများကိုသေချာစွာစစ်ဆေးပါ။ ဒေတာဘေ့စ်ဆက်သွယ်မှု, parameter binding,
အကယ်. သင်သည်ပြ the နာကိုရှာမတွေ့နိုင်ပါက MySQLI_ERRORERRORR () နှင့် MySQLI_STMTM တွင်အမှားအချက်အလက်များကိုသင်ကြည့်ရှုနိုင်သည်။