MySQLI_STMT :: $ error_list သည် PHP ၏ MySQLI extension ကို အသုံးပြု. ပြင်ဆင်ထားသောထုတ်ပြန်ချက်များကိုအကောင်အထည်ဖော်သည့်အခါအလွန်အရေးကြီးသော debugging tool တစ်ခုဖြစ်သည်။ $ stmt-> အမှားတစ်ခု ကဲ့သို့နောက်ဆုံးအမှားကိုပြန်ပို့မည့်အစားအမှားအယွင်းများအားလုံးနှင့်အတူခင်းကျင်းစေသည်။ အမှားအယွင်းများသည်အလျင်အမြန်သို့မဟုတ်ပြင်ဆင်မှုတစ်ခုတွင်တစ်ချိန်တည်းတွင်အမှားအယွင်းများပြုလုပ်သောအခါဤပစ္စည်းသည်အထူးအရေးကြီးသည်။
သို့သော် developer များက ဒေါ်လာ stmtt-> error_list မှပြန်လာသောအမှားအယွင်းများစွာနှင့်ရင်ဆိုင်ရသောအခါ၎င်းတို့သည်မကြာခဏရှုပ်ထွေးနေကြသောအခါသူတို့ကမကြာခဏရှုပ်ထွေးနေကြတယ်။ ဒီအမှားသတင်းအချက်အလက်ကိုယုတ္တိဗေဒချို့တဲ့ခြင်းမရှိဘဲပြ the နာကိုတိကျစွာရှာတွေ့နိုင်သလိုထိရောက်စွာထုတ်ယူခြင်း,
ဤဆောင်းပါးသည်အောက်ပါရှုထောင့်များမှအမှားမျိုးစုံအမှားမျိုးစုံ၏မဟာဗျူဟာများကိုဆွေးနွေးပါမည်။
$ stmt-> error_list သည် array တစ်ခုသို့ပြန်ပို့သည်။ element တစ်ခုစီသည်အောက်ပါသော့များပါ 0 င်သည့် activitive ခင်းကျင်းသည်။
errno : အမှားကုဒ် (ကိန်းဂဏန်း)
SQLSTATE : SQLSTATE အမှားအမှတ်အသား (string)
ချို့ယွင်းချက် - အမှားမက်ဆေ့ခ်ျ (string)
ပုံမှန်ဖွဲ့စည်းပုံမှာအောက်ပါအတိုင်းဖြစ်သည် -
<span><span>[
[
</span><span><span class="hljs-string">'errno'</span></span><span> => </span><span><span class="hljs-number">1064</span></span><span>,
</span><span><span class="hljs-string">'sqlstate'</span></span><span> => </span><span><span class="hljs-string">'42000'</span></span><span>,
</span><span><span class="hljs-string">'error'</span></span><span> => </span><span><span class="hljs-string">'You have an error in your SQL syntax; check the manual...'</span></span><span>
],
[
</span><span><span class="hljs-string">'errno'</span></span><span> => </span><span><span class="hljs-number">1048</span></span><span>,
</span><span><span class="hljs-string">'sqlstate'</span></span><span> => </span><span><span class="hljs-string">'23000'</span></span><span>,
</span><span><span class="hljs-string">'error'</span></span><span> => </span><span><span class="hljs-string">'Column \'name\' cannot be null'</span></span><span>
]
]
</span></span>ဆိုလိုသည်မှာအမှားတစ်ခုသာရှိသည်ဟုယူဆမည့်အစားအမှားတစ်ခုစီကိုသီးခြားစီဆုံးဖြတ်ရန်လိုအပ်သည်ဟုဆိုလိုသည်။
SQL Execution တစ်ခုချင်းစီတွင်ထပ်ခါတလဲလဲလုပ်ဆောင်ခြင်းယုတ္တိဗေဒကိုရှောင်ရှားရန်,
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">handle_stmt_errors</span></span><span>(</span><span><span class="hljs-params">mysqli_stmt <span class="hljs-variable">$stmt</span></span></span><span>) {
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>->error_list </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$error</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"[SQL Error] Code: <span class="hljs-subst">{$error['errno']}</span></span></span><span> | SQLSTATE: </span><span><span class="hljs-subst">{$error['sqlstate']}</span></span><span> | Message: </span><span><span class="hljs-subst">{$error['error']}</span></span><span>");
}
}
</span></span>ဤနည်းအားဖြင့်သင်သည်အချိန်ကာလတစ်ခုစီကို ( သို့မဟုတ် ) မအောင်မြင်ပါ။
<span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>()) {
</span><span><span class="hljs-title function_ invoke__">handle_stmt_errors</span></span><span>(</span><span><span class="hljs-variable">$stmt</span></span><span>);
}
</span></span>အမှားအားလုံးဟာတူညီစွာအရေးကြီးတယ်။ အမှားအယွင်းများအရ ခွဲခြားရန်အကြံပြုသည်။
ယုတ္တိရှိသည့်အမှားများ (ထိုကဲ့သို့သောအချည်းနှီးသောဒေတာ, ထူးခြားသောသော့ချက်ပ conflict ိပက်ခ) - အသုံးပြုသူအားပြန်လည်တုံ့ပြန်ခြင်းသို့မဟုတ်စီးပွားရေးချွင်းချက်အဖြစ်မှတ်တမ်းတင်ထားနိုင်သည်။
Syntax အမှားအယွင်းများသို့မဟုတ်ဒေတာဘေ့စ်ပျက်ကွက်မှုများ (ဥပမာ SQL စာလုံးပေါင်းအမှားများ, ဆက်သွယ်မှုပျောက်ဆုံးခြင်း) - တောင်းဆိုမှုကိုချက်ချင်းခေါ်ယူသင့်သည်။
သင်သည်ပြင်းထန်မှုကိုဆုံးဖြတ်ရန်ရိုးရှင်းသောမြေပုံစားပွဲကိုသုံးနိုင်သည်။
<span><span><span class="hljs-variable">$criticalErrors</span></span><span> = [</span><span><span class="hljs-number">1064</span></span><span>, </span><span><span class="hljs-number">2006</span></span><span>, </span><span><span class="hljs-number">2013</span></span><span>];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>->error_list </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$error</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$error</span></span><span>[</span><span><span class="hljs-string">'errno'</span></span><span>], </span><span><span class="hljs-variable">$criticalErrors</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">trigger_error</span></span><span>(</span><span><span class="hljs-string">"လေးနက် database အမှား: <span class="hljs-subst">{$error['error']}</span></span></span><span>", E_USER_ERROR);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"ပုံမှန်အမှား: <span class="hljs-subst">{$error['error']}</span></span></span><span>");
}
}
</span></span>developer များလျစ်လျူရှုရန်လွယ်ကူသည့်အရာတစ်ခုမှာ ပြင်ဆင်ခြင်း၏ ပျက်ကွက်မှုမှာအမှားအယွင်းများကိုထုတ်ပေးနိုင်သည်။ ၎င်းသည်မှားယွင်းသောပြန်လည်ထူထောင်ရေးတန်ဖိုးဖြင့်တရားစီရင်ခြင်းမပြုနိုင်ပါ။ ၎င်းသည် Error_list ဟုခေါ်ရန်လိုအပ်သည်။
<span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$stmt</span></span><span>) {
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->error_list </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$error</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"Prepare Error: <span class="hljs-subst">{$error['error']}</span></span></span><span>");
}
}
</span></span>ဖွံ့ဖြိုးရေးအဆင့်တွင်အမှားအယွင်းများသို့မဟုတ်ဖွံ့ဖြိုးရေးခိုင်းရာတွင်အမှားအယွင်းများကိုမှတ်တမ်းတင်ရန်အကြံပြုထားပြီးထုတ်လုပ်မှုပတ် 0 န်းကျင်တွင်မှတ်တမ်းများကိုသာမှတ်တမ်းတင်ထားသင့်သည်။
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">log_stmt_errors</span></span><span>(</span><span><span class="hljs-params">mysqli_stmt <span class="hljs-variable">$stmt</span></span></span><span>, </span><span><span class="hljs-variable">$display</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>->error_list </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$error</span></span><span>) {
</span><span><span class="hljs-variable">$message</span></span><span> = </span><span><span class="hljs-string">"[Error <span class="hljs-subst">{$error['errno']}</span></span></span><span>] </span><span><span class="hljs-subst">{$error['error']}</span></span><span> (SQLSTATE: </span><span><span class="hljs-subst">{$error['sqlstate']}</span></span><span>)";
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-variable">$message</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$display</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<div class=\"sql-error\"><span class="hljs-subst">$message</span></span></span><span></div>";
}
}
}
</span></span>MySQLI_STMT :: $ error_list သည် သော့ချက်နည်းသော်လည်းအစွမ်းထက်သောအမှားပြ troubl နာဖြေရှင်းခြင်းကိရိယာဖြစ်သည်။ သင်ရှုပ်ထွေးသော SQL operations များကိုဖျော်ဖြေတင်ဆက်သည့်အခါ parameters များစွာကိုဖြည့်ဆည်းသောအခါသို့မဟုတ်ဒေတာစားပွဲများစွာကိုချိတ်ဆက်နေသည့်အခါအမှားတစ်ခုထက်ပိုသောအမှားများကိုမကြာခဏဖော်ပြလေ့ရှိသည်။ ဤအမှားများကိုမှန်ကန်စွာခွဲခြားခြင်းနှင့်ခွဲခြားသတ်မှတ်ခြင်းသည်အမှားအယွင်းများကိုလျင်မြန်စွာပြင်ဆင်ရန်သာမကစနစ်အားစိတ် 0 င်စားမှုကိုတိုးတက်စေသည်။
$ stmt-> အမှား - မာစတာ error_list ကိုမကြည့်ပါနှင့်။ Debugging SQL သည်အဆင့်တစ်ခုထက်ပိုပြီးစွမ်းဆောင်ရည်ကိုတိုးတက်စေနိုင်သည်ကိုသင်တွေ့လိမ့်မည်။
သက်ဆိုင်သောတက်(ဂ်)များ:
mysqli_stmt