လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MySQLI :: Get_warenings နှင့် MySQLI :: Log analysis လုပ်ရန် error_list ကိုအသုံးပြုနည်း

MySQLI :: Get_warenings နှင့် MySQLI :: Log analysis လုပ်ရန် error_list ကိုအသုံးပြုနည်း

gitbox 2025-05-28

1 ။ MySQLI :: Get_warenings နှင့် MySQLI :: error_list ကို နားလည်ပါ

1.1 MySQLI :: Get_warenings ()

ဤနည်းလမ်းသည် 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());
}

1.2 MySQLI :: error_list

ဆန့်ကျင်ဘက်အနေ နှင့်အမှားအယွင်းများသည် အမှားအယွင်းများအပါအ 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;
    }
}

2 ။ logging ယုတ္တိဗေဒပေါင်းစပ်

ပိုမိုပြည့်စုံသောသစ်ထုတ်လုပ်မှုကိုရရှိရန်ကျွန်ုပ်တို့သည် log function တစ်ခု, အမှားအယွင်းများနှင့်သတိပေးသတင်းအချက်အလက်များကိုမှတ်တမ်းတင်နိုင်ပြီး,

2.1 အဓိကကုဒ်ဖွဲ့စည်းပုံ

 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);
    }
}

2.2 အသုံးပြုနည်း

 $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);

3 ။ ပုံမှန်အခြေအနေများအတွက်တန်ဖိုးသရုပ်ဖော်ခြင်း

3.1 အညွှန်းကိန်းပျက်ကွက်သတိပေးချက်

MySQL သည်အညွှန်းပြတ်တောက်မှုများကိုဖြစ်ပေါ်စေသည့်အချို့မေးမြန်းချက်အချို့ကိုကွပ်မျက်ရာတွင်သတိပေးလိမ့်မည် -

 $sql = "SELECT * FROM users WHERE name LIKE '%abc%'";

ဤ SQL သည်တရားဝင်ဖြစ်ပြီးရလဒ်များကိုပြန်လည်ပေးပို့နိုင်သော်လည်းရလဒ်များကို ပြန်လည်ပေးပို့နိုင်သော်လည်း အညွှန်းကိန်းများအကြောင်းသို့မဟုတ် query logic ကိုညှိရန်အထောက်အကူဖြစ်စေသည့်၎င်း၏ထိရောက်မှုဆိုင်ရာပြ issues နာများကိုဖော်ပြနိုင်သည်။

3.2 ဒေတာ truncation သတိပေးချက်

လယ်ကွင်း၏အရှည်ထက်ကျော်လွန်သောအကြောင်းအရာများကိုထည့်ခြင်းမအောင်မြင်နိုင်သော်လည်းသတိပေးချက်တစ်ခုဖြစ်ပေါ်လာလိမ့်မည်။ မှတ်တမ်းများမှတဆင့်ကွင်းဆင်းဒီဇိုင်းသို့မဟုတ်ရှေ့ -Drint စိစစ်အတည်ပြုယုတ္တိဗေဒကိုရှာဖွေတွေ့ရှိနိုင်ပြီးအချိန်မီအလွယ်တကူပြုလုပ်နိုင်သည်။


4 ။ ဝေးလံခေါင်သီသောမှတ်တမ်းဝန်ဆောင်မှုနှင့်ပေါင်းစည်းပါ

ကြီးမားသောစီမံကိန်းများတွင်မှတ်တမ်းများကိုဒေသခံစာသားဖြင့်သာသိမ်းဆည်းထားခြင်းမပြုသင့်ပါ။ ဤမှတ်တမ်းများကို 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);
}