လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MySQLI :: Get_warenings ကို Universal သတိပေးချက်ဖမ်းယူခြင်း module သို့ adapsate

MySQLI :: Get_warenings ကို Universal သတိပေးချက်ဖမ်းယူခြင်း module သို့ adapsate

gitbox 2025-05-26

MySQL ဒေတာဘေ့စ်များကို PHP ကို ​​အသုံးပြု. ချိတ်ဆက်ခြင်းနှင့်ကြိုးကိုင်မှုများကို MySQLI တိုးချဲ့ခြင်းသည် MySQLI :: မေးမြန်းမှု , MySQLI :: ပြင်ဆင်ရန် လိုသောနည်းစနစ်များကိုထောက်ပံ့ပေးသည်။ SQL ကို execute လုပ်ရန် အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင် SQL သည်အောင်မြင်မှုရှိမရှိကိုအာရုံစိုက်ခြင်းအပြင်တစ်ခါတစ်ရံတွင်ကွပ်မျက်မှုလုပ်ငန်းစဉ်ကိုတစ်ခါတစ်ရံရရှိရန်လိုအပ်သည်။ ဤသတိပေးချက်များသည် SQL ကွပ်မျက်မှုမအောင်မြင်စေနိုင်သော်လည်း၎င်းတို့သည်အလားအလာရှိသောပြ problems နာများကိုဖုံးကွယ်ထားနိုင်သည်။

PHP ၏ MySQLI :: Get_warening Method သည်ဆက်သွယ်မှု၏နောက်ဆုံးစစ်ဆင်ရေးမှထုတ်ပေးသောသတိပေးချက်များအားလုံးကိုရနိုင်သည်။ သို့သော်၎င်းအသုံးပြုမှုသည်မကြာခဏစိတ်အနှောက်အယှက်ဖြစ်စေသည် ဖြစ်. ၎င်းကို module တစ်ခုထဲသို့ 0 င်နိုင်လျှင်၎င်းကိုစီမံကိန်းတွင်အလွယ်တကူပြန်လည်အသုံးချနိုင်ပြီးကုဒ်ကိုသပ်သပ်ရပ်ရပ်ထိန်းသိမ်းထားနိုင်သည်။

ဤဆောင်းပါးသည် MySQLI :: Get_warenings ကို ပြန်လည်သုံးသပ်နိုင်သော MySQL သတိပေးချက် Capture Module သို့မည်သို့ adapsate လုပ်ရမည်ကိုဖော်ပြရန်ဖော်ပြရန်ဖော်ပြရန်ဖြစ်သည်။

1 ။ နောက်ခံဗဟုသုတ

MySQLI :: Get_warenings () method method သည် MySQLI_Warning အရာဝတ်ထုများကိုရည်ညွှန်းသည်။ MySQLI_Warning အရာဝတ်ထုတစ်ခုစီတွင်အောက်ပါအချက်အလက်များပါရှိသည်။

  • မက်ဆေ့ခ်ျ : သတိပေးစာ

  • SQLSTATE : SQLSTATE အမှားကုဒ်

  • Errno : MySQL အမှားကုဒ်

2 ။ module ဒီဇိုင်းစိတ်ကူးများ

ကျွန်ုပ်တို့၏ရည်မှန်းချက်မှာ Warnolllector အတန်းကိုအကောင်အထည်ဖော်ရန်ဖြစ်သည်။

  • MySQLI ဥပမာအားဖြင့်ချည်နှောင်ခြင်း,

  • SQL ထုတ်ပြန်ချက်များကို Execute လုပ်ပြီးသတိပေးသတင်းအချက်အလက်ကိုအလိုအလျောက်စုဆောင်းပါ။

  • သတိပေးသတင်းအချက်အလက်ကို format လုပ်ပြီး log သို့ပြန်သွားပါ။

  • လာမည့်စစ်ဆင်ရေးကိုအကျိုးသက်ရောက်ရန်ကျန်ရှိနေသေးသောသတိပေးသတင်းအချက်အလက်များကိုရှောင်ရှားရန်သန့်ရှင်းရေးနည်းလမ်းများကိုသတိပေးပါ။

3 ။ module code အကောင်အထည်ဖော်မှု

အောက်ဖော်ပြပါသည်အကောင်အထည်ဖော်မှုကုဒ်ဖြစ်သည်။

 <?php

class WarningCollector
{
    private mysqli $conn;
    private array $warnings = [];

    public function __construct(mysqli $connection)
    {
        $this->conn = $connection;
    }

    public function execute(string $sql): bool|mysqli_result
    {
        $result = $this->conn->query($sql);
        $this->collectWarnings();
        return $result;
    }

    private function collectWarnings(): void
    {
        $this->warnings = []; // ဒေတာအဟောင်းကိုရှင်းရှင်းလင်းလင်း
        $warning = $this->conn->get_warnings();
        while ($warning) {
            $this->warnings[] = [
                'errno'    => $warning->errno,
                'sqlstate' => $warning->sqlstate,
                'message'  => $warning->message,
            ];
            $warning = $warning->next();
        }
    }

    public function getWarnings(): array
    {
        return $this->warnings;
    }

    public function hasWarnings(): bool
    {
        return !empty($this->warnings);
    }

    public function logWarnings(string $logPath = '/tmp/mysql_warnings.log'): void
    {
        if ($this->hasWarnings()) {
            foreach ($this->warnings as $w) {
                $entry = sprintf(
                    "[%s] MySQL Warning - Errno: %d, SQLSTATE: %s, Message: %s\n",
                    date('Y-m-d H:i:s'),
                    $w['errno'],
                    $w['sqlstate'],
                    $w['message']
                );
                file_put_contents($logPath, $entry, FILE_APPEND);
            }
        }
    }
}

4 ။ ဥပမာများကိုသုံးပါ

ဒီ module ကိုအသုံးပြုပြီးအလွန်ရိုးရှင်းပါသည်။ SQL ကိုမလုပ်ဆောင်မီဆက်သွယ်မှုကို encapsult လုပ်ရန်၎င်းကိုအသုံးပြုပါ။

 <?php

$mysqli = new mysqli('localhost', 'user', 'pass', 'database');
$collector = new WarningCollector($mysqli);

// ကရိယာတန်းဆာ SQL
$sql = "INSERT INTO demo (name) VALUES ('duplicate-key')";
$collector->execute($sql);

// သတိပေးစစ်ဆေးပါ
if ($collector->hasWarnings()) {
    $collector->logWarnings();
    print_r($collector->getWarnings());
}

5 ။ လက်တွေ့ကျသော application အခြေအနေများ

ဤ Encapsulations သည်အထူးစီမံကိန်းအမျိုးအစားများတွင်အထူးအသုံးဝင်သည်။

  • ဒေတာရွှေ့ပြောင်းရေးရာဇာတ်ညွှန်း - သတိပေးချက်သည်ကွင်းဆင်းခြင်းသို့မဟုတ်မတိုက်ဆိုင်မှုအမျိုးအစားကိုဖော်ပြနိုင်သည်။

  • Batch Import Tool - အချက်အလက်အမြောက်အများကိုထည့်သွင်းသောအခါကန့်သတ်ချက်နှင့်ပတ်သက်သောသတိပေးချက်များကိုအလွယ်တကူဖြစ်ပေါ်လာနိုင်သည်။

  • ဒေတာအရည်အသွေးစစ်ဆေးခြင်း - နောက်ပိုင်းခွဲခြမ်းစိတ်ဖြာခြင်းအတွက် Log System မှတဆင့်ဗဟိုမှသတိပေးချက်များစုဆောင်းခြင်း,

Larave, Symfony စသဖြင့်သင်မူဘောင်များကိုအသုံးပြုပါက၎င်းတို့ကိုဤအယူအဆတွင်မှီခိုအားထားသည့်အနေဖြင့်ဤအယူအဆကို အခြေခံ. Middleware (သို့) 0 န်ဆောင်မှုအတန်းများထဲသို့ထည့်နိုင်သည်။

6 ။ မှတ်စုဖို့အရာ

  • MySQLI :: Get_warenings () သည် နောက်ဆုံးစစ်ဆင်ရေးမှရရှိသောသတိပေးချက်များကိုသာရနိုင်သည်။

  • အကယ်. သင်သည် ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များကို အသုံးပြုနေပါကသတိပေးခြင်းမပြုမီ သင်လုပ်ဆောင်ရန် သေချာစေရန်အကြံပြုပါသည်။

  • ကွဲပြားသော MySQL ဗားရှင်းများသည်သတိပေးချက်များအတွက်အနည်းငယ်သာကွဲပြားသောအထောက်အပံ့များရှိသည်။ ဖွံ့ဖြိုးတိုးတက်မှုနှင့်ထုတ်လုပ်မှုပတ် 0 န်းကျင်ဗားရှင်းများသည်တသမတ်တည်းဖြစ်ကြောင်းအကြံပြုသည်။

7 ။ နိဂုံးချုပ်

MySQLI :: get_warenings များကို get_warenings ထဲသို့ encapsulating အားဖြင့်ကျွန်ုပ်တို့သည် SQL သတိပေးချက်များကိုပိုမိုလွယ်ကူစွာဖမ်းယူနိုင်ရုံသာမကစနစ်၏ထိန်းသိမ်းမှုနှင့်အားကောင်းသောတိုးတက်မှုကိုပိုမိုကောင်းမွန်စေသည်။ သင်၏ Project channel အထောက်အပံ့, သတိပေးအဆင့်စီစစ်ခြင်းစသည်ဖြင့်သင်၏စီမံကိန်းတည်ဆောက်ပုံနှင့်အညီထပ်မံတိုးချဲ့နိုင်သည်။

ပြီးပြည့်စုံသောစီမံကိန်းဥပမာများအရ,
https://gitbox.net/example/mysql-warning-collector