ဒေတာဘေ့စ်လုပ်ငန်းများ၌ debugging php applications များကိုတီထွင်သောအခါအရေးပါသောအလုပ်ဖြစ်သည်။ MySQLI_STMT :: $ အမှား သည် SQL ထုတ်ပြန်ချက်များကိုအကောင်အထည်ဖော်သည့်အခါပေါ်ပေါက်လာသောအမှားများကိုဖမ်းယူနိုင်သည့်အမှားအယွင်းများကိုဖမ်းမိသောကိရိယာများကိုဖမ်းမိသောကိရိယာတစ်ခုဖြစ်သည်။ ဤအမှားများကိုပိုမိုကောင်းမွန်သောလမ်းကြောင်းရှာဖွေရန်နှင့် debug လုပ်ရန် MySQLI_SSTMT ၏အမှားအချက်အလက်များကို log system ထဲသို့ 0 င်ရောက်ခြင်းကို ပေါင်းစပ်ရန်အလွန်ထိရောက်စေသည်။
ဤဆောင်းပါးတွင် MySQLI_STMT ကိုမည်သို့ပေါင်းစပ်ရမည်ကိုကျွန်ုပ်တို့ရှင်းပြပါမည်။
MySQLI_STMT :: $ အမှား သည် MySQLI_STMT အတန်းအစား၏ပိုင်ဆိုင်မှုတစ်ခုဖြစ်သည်။ ဤအိမ်ခြံမြေမှတစ်ဆင့် MySQL မှပြန်လာသောအမှားမက်ဆေ့ခ်ျကိုသင်ဝင်ရောက်ကြည့်ရှုနိုင်သည်။ ဥပမာအားဖြင့်, သင်သည် SQL query တစ်ခုကို execute လုပ်ပါကအမှားတစ်ခုဖြစ်ပါကဤပစ္စည်းဥစ်စာပိုင်ဆိုင်မှုမှတစ်ဆင့်အထူးအမှားအချက်အလက်များကိုသင်ရရှိနိုင်သည်။
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $user_id);
if (!$stmt->execute()) {
// output error message
echo "Error: " . $stmt->error;
}
အထက်ဖော်ပြပါကုဒ်တွင် SQL query execution ပျက်ကွက်လျှင် ဒေါ်လာ stmt-> အမှားတွင် MySQL အမှားအယွင်းရှိအသေးစိတ်ဖော်ပြချက်ပါလိမ့်မည်။ ပိုမိုကောင်းမွန်သောအမှားများသစ်ထုတ်လုပ်ခြင်းကိုသေချာစေရန်ကျွန်ုပ်တို့သည်ဤအမှားအယွင်းများကို log system သို့ဖြတ်သန်းသွားမည်ဖြစ်သည်။
မှတ်တမ်းသို့အမှားအချက်အလက်များကိုရေးရန်ကျွန်ုပ်တို့ပထမ ဦး ဆုံးရိုးရှင်းသောသစ်ထုတ်လုပ်ရေးစနစ်ရှိသည်။ သစ်ခုတ်ရေးရေးသားခြင်းကိုစီမံရန် logger အတန်းကိုဖန်တီးနိုင်သည်။ ဤအတန်းသည်သတ်မှတ်ထားသောမှတ်တမ်းဖိုင်သို့အမှားအချက်အလက်များကိုရေးရန်တာဝန်ရှိသည်။
class Logger {
private $logFile;
public function __construct($logFile) {
$this->logFile = $logFile;
}
public function log($message) {
$date = date('Y-m-d H:i:s');
file_put_contents($this->logFile, "[$date] $message\n", FILE_APPEND);
}
}
ဤ Logger အတန်းသည်သတ်မှတ်ထားသော log file ထဲသို့မှတ်တမ်းမက်ဆေ့ခ်ျတစ်ခုထည့်ပြီး timestamp ပါရှိသည်။ ထို့နောက် MySQLI_STMMT :: $ အမှား အိမ်ခြံမြေများမှတဆင့်ဒေတာဘေ့စ်စစ်ဆင်ရေးအမှားများကိုကျွန်ုပ်တို့ဖမ်းယူပါမည်။
ယခုကျွန်ုပ်တို့သည် Database Operations မှမှတ်တမ်းသို့အမှားအချက်အလက်များကိုရေးရန် logger အတန်းကိုသုံးနိုင်သည်။ ကျွန်ုပ်တို့သည်ဒေတာဘေ့စ် connection ကိုတည်ဆောက်ပြီးရှာဖွေမှုကိုအကောင်အထည်ဖော်ရန်အဆင်သင့်ဖြစ်နေပြီဟု ယူဆပြီး ,
$mysqli = new mysqli('localhost', 'user', 'password', 'database');
$logger = new Logger('/path/to/your/logfile.log');
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $user_id);
if (!$stmt->execute()) {
// အမှားအယွင်းများကိုဖမ်းပြီး log လုပ်ရန်ရေးပါ
$errorMessage = "MySQL Error: " . $stmt->error;
$logger->log($errorMessage);
// အမှားအယွင်းများကိုပြသရန်သင်ရွေးချယ်နိုင်သည်,သို့မဟုတ်အမှားအယွင်းများနှင့်အတူကိုင်တွယ်ရန်အခြားနည်းလမ်းများ
echo "An error occurred. Please check the logs for details.";
}
အထက်ပါကုဒ်တွင်ကျွန်ုပ်တို့သည်စုံစမ်းမှုစစ်ဆင်ရေးပြုလုပ်ရန်ကြိုးစားသည်။ အကယ် . မေးမြန်းမှုမအောင်မြင်ပါကအမှားအယွင်းကို MySQLI_STMT :: အမှားအယွင်းများ ဖြင့်ဖမ်းယူလိမ့်မည် ။
ဤနည်းအားဖြင့်ဒေတာဘေ့စ်အမှားများအားလုံးကို log file ထဲသို့အလွယ်တကူ log လုပ်နိုင်ပြီး၎င်းသည်ပြ problem နာကိုအလျင်အမြန်ရှာဖွေနိုင်သည်။
Log Accessability တိုးတက်စေရန်အမှားမက်ဆေ့ခ်ျများကိုသစ်ထုတ်လုပ်သည့်အခါသင်နောက်ထပ်အခြေအနေများထပ်မံထည့်သွင်းနိုင်သည်။ ဥပမာအားဖြင့် SQL ကြေငြာချက်, SQL ကြေငြာချက်ကိုယ်တိုင်နှင့်အမှားဖိုင်နှင့်လိုင်းနံပါတ်နှင့်အခြားအချက်အလက်များကိုသင်မှတ်တမ်းတင်ထားသည့်အချိန်ကိုမှတ်တမ်းတင်နိုင်သည်။ ဤသည် debugging လုပ်ငန်းစဉ်အတွင်းအမှား၏အကြောင်းရင်းကိုပိုမိုနားလည်ရန်ကူညီလိမ့်မည်။
class Logger {
private $logFile;
public function __construct($logFile) {
$this->logFile = $logFile;
}
public function log($message) {
$date = date('Y-m-d H:i:s');
file_put_contents($this->logFile, "[$date] $message\n", FILE_APPEND);
}
public function logError($stmt, $sql) {
$errorMessage = "MySQL Error: " . $stmt->error;
$errorDetails = [
'timestamp' => date('Y-m-d H:i:s'),
'error_message' => $errorMessage,
'sql' => $sql,
'file' => debug_backtrace()[0]['file'],
'line' => debug_backtrace()[0]['line']
];
$this->log(json_encode($errorDetails));
}
}
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $user_id);
if (!$stmt->execute()) {
// အသေးစိတ်အမှားသတင်းအချက်အလက်မှတ်တမ်းတင်
$logger->logError($stmt, "SELECT * FROM users WHERE id = $user_id");
echo "An error occurred. Please check the logs for details.";
}
SQL ထုတ်ပြန်ချက်များ, ဖိုင်အမည်များနှင့်လိုင်းနံပါတ်များအပါအ 0 င်အသေးစိတ်အမှားသတင်းအချက်အလက်များကိုမှတ်တမ်းတင်ခြင်းအားဖြင့်သင်သည်အမှားအယွင်းများကိုပိုမိုလွယ်ကူစွာခြေရာခံနိုင်ပြီးပြ issues နာများကိုလျင်မြန်စွာရှာဖွေနိုင်သည်။