ဤနည်းလမ်းသည် MySQLI_Warning Object ကိုပြန်ပို့ပြီး Database မှသတိပေးချက်အားလုံးကိုဖြတ်သန်းခွင့်ပြုသည်။ အောင်မြင်စွာကွပ်မျက်ခံရပေမယ့်သတိပေးချက်ပြန်လာသော SQL မှသက်ဆိုင်ပါသည်။
$mysqli = new mysqli("localhost", "user", "pass", "database");
$mysqli->query("YOUR SQL HERE");
if ($warning = $mysqli->get_warnings()) {
do {
echo "Warning: " . $warning->message . PHP_EOL;
} while ($warning->next());
}
ဆန့်ကျင်ဘက်အနေ နှင့်အမှားအယွင်းများသည် အမှားအယွင်းများအပါအ 0 င်အမှားအယွင်းများအပါအ 0 င်အမှားအယွင်းများအပါအ 0 င်အမှားအယွင်းများအပါအ 0 င်အမှားအယွင်းများအပါအ 0 င် array ဖြစ်သည်။
$result = $mysqli->query("BROKEN SQL");
if (!$result) {
foreach ($mysqli->error_list as $error) {
echo "Error [{$error['errno']}]: {$error['error']}" . PHP_EOL;
}
}
ပိုမိုပြည့်စုံသောသစ်ထုတ်လုပ်မှုကိုရရှိရန်ကျွန်ုပ်တို့သည် log function တစ်ခု, အမှားအယွင်းများနှင့်သတိပေးသတင်းအချက်အလက်များကိုမှတ်တမ်းတင်နိုင်ပြီး,
function log_db_activity(mysqli $mysqli, string $sql, $result): void {
$log = [];
// စံချိန်SQLအသေအချာပေြာဆိုချက်
$log['sql'] = $sql;
$log['time'] = date('c');
// အမှားများကိုစစ်ဆေးပါ
if (!$result && !empty($mysqli->error_list)) {
$log['errors'] = $mysqli->error_list;
}
// သတိပေးစစ်ဆေးပါ
if ($warning = $mysqli->get_warnings()) {
$log['warnings'] = [];
do {
$log['warnings'][] = [
'errno' => $warning->errno,
'message' => $warning->message,
];
} while ($warning->next());
}
if (!empty($log['errors']) || !empty($log['warnings'])) {
// ဒေတာဘေ့စ်သို့မဟုတ်ဇွဲနည်းလမ်းနှင့်အစားထိုးနိုင်ပါတယ်
file_put_contents(__DIR__ . '/db_log.json', json_encode($log, JSON_PRETTY_PRINT) . PHP_EOL, FILE_APPEND);
}
}
$mysqli = new mysqli("localhost", "user", "pass", "database");
$sql = "INSERT INTO users (id, name) VALUES (1, 'Tom')";
$result = $mysqli->query($sql);
log_db_activity($mysqli, $sql, $result);
MySQL သည်အညွှန်းပြတ်တောက်မှုများကိုဖြစ်ပေါ်စေသည့်အချို့မေးမြန်းချက်အချို့ကိုကွပ်မျက်ရာတွင်သတိပေးလိမ့်မည် -
$sql = "SELECT * FROM users WHERE name LIKE '%abc%'";
ဤ SQL သည်တရားဝင်ဖြစ်ပြီးရလဒ်များကိုပြန်လည်ပေးပို့နိုင်သော်လည်းရလဒ်များကို ပြန်လည်ပေးပို့နိုင်သော်လည်း အညွှန်းကိန်းများအကြောင်းသို့မဟုတ် query logic ကိုညှိရန်အထောက်အကူဖြစ်စေသည့်၎င်း၏ထိရောက်မှုဆိုင်ရာပြ issues နာများကိုဖော်ပြနိုင်သည်။
လယ်ကွင်း၏အရှည်ထက်ကျော်လွန်သောအကြောင်းအရာများကိုထည့်ခြင်းမအောင်မြင်နိုင်သော်လည်းသတိပေးချက်တစ်ခုဖြစ်ပေါ်လာလိမ့်မည်။ မှတ်တမ်းများမှတဆင့်ကွင်းဆင်းဒီဇိုင်းသို့မဟုတ်ရှေ့ -Drint စိစစ်အတည်ပြုယုတ္တိဗေဒကိုရှာဖွေတွေ့ရှိနိုင်ပြီးအချိန်မီအလွယ်တကူပြုလုပ်နိုင်သည်။
ကြီးမားသောစီမံကိန်းများတွင်မှတ်တမ်းများကိုဒေသခံစာသားဖြင့်သာသိမ်းဆည်းထားခြင်းမပြုသင့်ပါ။ ဤမှတ်တမ်းများကို https://gitbox.net/api/logs ကဲ့သို့သောဝေးလံခေါင်သီသော log collection service သို့ထပ်မံတွန်းပို့နိုင်သည်။
function send_log_to_remote(array $log): void {
$ch = curl_init('https://gitbox.net/api/logs');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($log),
]);
curl_exec($ch);
curl_close($ch);
}