လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MySQLI_RESELT ကို universate data access layer သို့ encapsult

MySQLI_RESELT ကို universate data access layer သို့ encapsult

M66 2025-05-17

PHP applications များကိုတီထွင်သည့်အခါ MySQLI extension များသည် MySQL database များနှင့်အပြန်အလှန်ဆက်သွယ်ရန်သာမန်နည်းလမ်းဖြစ်သည်။ စီမံကိန်းတိုးချဲ့ရန်ဆက်လက်မြင့်တက်လာသည်နှင့်အမျှ MySQLI လုပ်ဆောင်ချက်များကိုအသုံးပြုခြင်းသည် Code, coupling နှင့်ထိန်းသိမ်းရန်ခက်ခဲသည်။ Code reusability နှင့်ထိန်းသိမ်းမှုကိုတိုးတက်စေရန် MySQLI_RESULT function ကိုဘုံဒေတာ Access layer သို့ onlatfulate လုပ်နိုင်ပါတယ်။

ဤဆောင်းပါးသည် mysqli_result function ကိုမည်သို့ adapsate လုပ်ပြီးထိရောက်သောနှင့်ထိန်းသိမ်းထားသောဒေတာ Access အလွှာကိုတည်ဆောက်ရန်အထောက်အကူပြုရန်ကုဒ်များကိုပေးလိမ့်မည်။

1 ။ ဒေတာ Access အလွှာ၏ဒီဇိုင်းရည်ရွယ်ချက်များ

Data Access အလွှာ၏ရည်ရွယ်ချက်မှာ Database ၏ 0 င်ရောက်မှုဆိုင်ရာယုတ္တိဗေဒကိုခွဲခြားရန်မှာဒေတာဘေ့စ်၏ 0 င်ရောက်မှုကိုတိုက်ရိုက်မပေါ်လာစေရန်ဖြစ်သည်။ ဒေတာဘေ့စ်လုပ်ငန်းများကို encapsulating အားဖြင့်ကုဒ်၏ပြန်လည်သုံးသပ်ခြင်းနှင့်ထိန်းသိမ်းခြင်းတို့ကိုတိုးတက်စေနိုင်သည်။ နောက်ပိုင်းအဆင့်တွင်ဒေတာဘေ့စ်ကိုအစားထိုးရန်အခက်အခဲကိုလျှော့ချနိုင်သည်။

ဒေတာ Access အလွှာတစ်ခုကိုဒီဇိုင်းရေးဆွဲရာတွင်ထည့်သွင်းစဉ်းစားရန်အချက်များအနည်းငယ်သာရှိသည်။

  • ဒေတာဘေ့စ်ချိတ်ဆက်မှုများကို encapsulate : ဒေတာဘေ့စ်ကိုလုပ်ဆောင်တိုင်းအချိန်တိုင်းထပ်ခါတလဲလဲ connection code ကိုအရေးယူခြင်းကိုရှောင်ပါ။

  • ရှာဖွေမှုရလဒ်ပြုပြင်ခြင်းအတွက်လွယ်ကူစွာရှာဖွေခြင်း - MySQLI_RESELT ၏လည်ပတ်မှုများကို encapsult လုပ်ခြင်းနှင့်လုပ်ငန်းစဉ်မေးမြန်းချက်ဆိုင်ရာစုံစမ်းမှုသည်စည်းလုံးညီညွတ်မှုရှိစေသည်။

  • Crud Operations ကိုပံ့ပိုးကူညီခြင်း - သာဖြည့်စွက်ခြင်း, ဖျက်ခြင်း, ပြုပြင်ခြင်းနှင့်စစ်ဆေးမှုများကိုပံ့ပိုးပါ။

  • Code Reusability ကိုတိုးတက်အောင်ပြုလုပ်ခြင်း - encapsulations မှတစ်ဆင့်ဒေတာဘေ့စ်စစ်ဆင်ရေးကုဒ်ပြန်လည်သုံးသပ်ခြင်းသည်ပိုမိုမြင့်မားပြီး Code RESSundancy ကိုလျှော့ချသည်။

2 ။ ဒေတာဘေ့စအတန်းတစ်ခုဖန်တီးပါ

ပထမ ဦး စွာဒေတာဘေ့စ်၏ဆက်သွယ်မှုနှင့်စုံစမ်းမှုစစ်ဆင်ရေးကိုစီမံရန်ဒေတာဘေ့စ်အတန်းကိုဖန်တီးရန်လိုအပ်သည်။

 class Database {
    private $connection;
    
    // ဆောက်လုပ်ရေးသည်ဒေတာဘေ့စ်ဆက်သွယ်မှုကိုစတင်သည်
    public function __construct($host, $user, $password, $dbname) {
        $this->connection = new mysqli($host, $user, $password, $dbname);
        
        if ($this->connection->connect_error) {
            die("ဆက်သွယ်မှုမအောင်မြင်ပါ: " . $this->connection->connect_error);
        }
    }

    // တစ် ဦး စုံစမ်းမှု execute,ပြန်လာရလဒ်အစုအဝေး
    public function query($sql) {
        $result = $this->connection->query($sql);
        if (!$result) {
            die("စုံစမ်းမှုမအောင်မြင်ပါ: " . $this->connection->error);
        }
        return $result;
    }

    // ဒေတာဘေ့စ် connection ကိုပိတ်ပါ
    public function close() {
        $this->connection->close();
    }
}

အထက်ပါကုဒ်များတွင်ဒေတာဘေ့စ်ဆက်သွယ်မှုကိုစတင်ရန်နှင့် SQL Query များကိုကွပ်မျက်ရန်နှင့်ရလဒ်များကိုပြန်ပို့ခြင်းနှင့်ရလဒ်ကိုပြန်ပို့ရန် စုံစမ်းမှု နည်းလမ်းကိုကျွန်ုပ်တို့ onlabase class ကိုကျွန်ုပ်တို့ oncapsulate on on leadsulate on leadsulate on on leadsulate on leadsulate levate လုပ်သည်။

3 ။ MySQLI_Result ရလဒ်ကို encapsult

MySQLI_RESELT သည် MySQLI ရှိအရာရှိများရှာဖွေမှုရလဒ်များကိုသိမ်းဆည်းရန်အသုံးပြုသော MySQLI ရှိအရာဝတ်ထုတစ်ခုဖြစ်သည်။ ဒေတာ Access layer ကိုကျွန်ုပ်တို့တည်ဆောက်သောအခါရလဒ်လုပ်ဆောင်မှုကိုပိုမိုသတ်မှတ်ရန် MySQLI_RESELT ကို ပိုမိုများပြားစေရန်လိုအပ်သည်။

MySQLI_RESELT ကို ဘယ်လို encapsulate လုပ်နည်းရဲ့ကုဒ်ဥပမာတစ်ခုပါ။

 class DbResult {
    private $result;

    // အဆိုပါဆောက်လုပ်ရေး query ရလဒ်များကိုလက်ခံရရှိသည်
    public function __construct($result) {
        $this->result = $result;
    }

    // ရလဒ်အားလုံးကိုရယူပါ
    public function fetchAll() {
        $rows = [];
        while ($row = $this->result->fetch_assoc()) {
            $rows[] = $row;
        }
        return $rows;
    }

    // တစ်ခုတည်းလိုင်းရလဒ်များကိုရယူပါ
    public function fetchOne() {
        return $this->result->fetch_assoc();
    }

    // အတန်းအရေအတွက်ကိုရယူပါ
    public function numRows() {
        return $this->result->num_rows;
    }
}

အထက်ပါကုဒ်တွင် dbresult class သည် mySqli_result အရာဝတ်ထုကိုဖုံးအုပ်ထားပြီးအောက်ပါနည်းလမ်းများကိုပေးသည်။

  • Fetchall () : စုံစမ်းမှုရလဒ်အားလုံးကိုရယူပါ။

  • Fetchone () - စုံစမ်းမှုတစ်ခုတည်း၏ရလဒ်ကိုရယူပါ။

  • Numrows () : စုံစမ်းမှုရလဒ်အတွက်အတန်းအရေအတွက်ကိုပြန်ပို့သည်။

4 ။ ဒေတာ Access အလွှာဥပမာကိုဖြည့်ပါ

ဒေတာဘေ့စ်အတန်းကိုပေါင်းစပ်ခြင်းဖြင့် Encapsulations အတန်းကိုသတ်မှတ်ခြင်းအားဖြင့်အောက်တွင်ဖော်ပြထားသောအတိုင်းပြည့်စုံသောဒေတာ Access layer ကိုဖန်တီးနိုင်သည် -

 class DataAccessLayer {
    private $db;

    // ဆောက်လုပ်ရေးသည်ဒေတာဘေ့စ်ဆက်သွယ်မှုကိုစတင်သည်
    public function __construct($host, $user, $password, $dbname) {
        $this->db = new Database($host, $user, $password, $dbname);
    }

    // ဒေတာကိုရှာဖွေပြီး encapsulated ရလဒ်ကိုပြန်ပို့ပါ
    public function fetchData($sql) {
        $result = $this->db->query($sql);
        $dbResult = new DbResult($result);
        return $dbResult;
    }

    // ဒေတာထည့်ပါ
    public function insertData($sql) {
        return $this->db->query($sql);
    }

    // ဒေတာကို update လုပ်ပါ
    public function updateData($sql) {
        return $this->db->query($sql);
    }

    // ဒေတာကိုဖျက်ပါ
    public function deleteData($sql) {
        return $this->db->query($sql);
    }

    // ဆက်သွယ်မှုကိုပိတ်ပါ
    public function close() {
        $this->db->close();
    }
}

ဤဥပမာတွင် dataaccesserlayer အတန်းအစားသည်လူသိများသည့်ဒေတာဘေ့စ်လုပ်ငန်းများကို query query, ထည့်သွင်းခြင်း, မွမ်းမံခြင်းနှင့်ဖျက်ခြင်းကဲ့သို့သောဘုံဒေတာဘေ့စ်လုပ်ငန်းများကိုလိုက်နာသည်။ ကျွန်ုပ်တို့သည် Dbresulat Class ကို အသုံးပြု. စုံစမ်းမှုရလဒ်များကို encapsulate, ရလဒ်များကိုပိုမိုအဆင်ပြေစေသည်။

5 ။ ဒေတာ Access အလွှာကိုသုံးပါ

ယခုကျွန်ုပ်တို့သည် Encapsulated data access layer ကိုကျွန်ုပ်တို့၏စီးပွားရေးကျင့် 0 တ်ဖြင့်အသုံးပြုနိုင်သည်။

 // ဒေတာဘေ့စ်ကိုအသုံးပြုခွင့်ကိုဖန်တီးပါ
$dal = new DataAccessLayer('localhost', 'root', '', 'test_db');

// ဒေတာရှာဖွေမှုဒေတာ
$sql = "SELECT * FROM users";
$dbResult = $dal->fetchData($sql);

// စုံစမ်းမှုရလဒ်များကိုရယူပါ
$users = $dbResult->fetchAll();
foreach ($users as $user) {
    echo $user['username'] . "<br>";
}

// ဒေတာဘေ့စ် connection ကိုပိတ်ပါ
$dal->close();

ဤနည်းအားဖြင့်ကျွန်ုပ်တို့သည်စာမျက်နှာတစ်ခုချင်းစီတွင်ဆက်သွယ်မှုများ, query us processing products ကဲ့သို့သောယုတ္တိဗေဒကိုအကြိမ်ကြိမ်ရေးသားခြင်းမရှိဘဲဒေတာဘေ့စ်လုပ်ငန်းများကိုအလွယ်တကူလုပ်ဆောင်နိုင်သည်။

6 ။ အကျဉ်းချုပ်

MySQLI_RESELL ရလဒ်နှင့်ဒေတာဘေ့စ်ဆက်သွယ်မှုကို encapsulating အားဖြင့်ကျွန်ုပ်တို့သည်ဘုံဒေတာ Access layer ကိုဖန်တီးသည်။ ဤဒေတာ Access အလွှာသည်ဒေတာဘေ့စ်လုပ်ငန်းများကိုပိုမိုတိကျစေပြီးပြန်လည်သုံးသပ်ပြီးကုဒ်၏ထိန်းသိမ်းမှုကိုတိုးတက်စေသည်။ သင်၏စီးပွားရေးလိုအပ်ချက်များနှင့်အညီဤဒေတာ Access layer ကိုထပ်မံတိုးချဲ့နိုင်ပြီးငွေပေးငွေယူစီမံခန့်ခွဲမှု,

ဒေတာဘေ့စ်ဆက်သွယ်မှုများကိုပိုမိုပြောင်းလွယ်ပြင်လွယ်ရှိလိုပါကဒေတာဘေ့စ်ဆက်သွယ်မှုများကိုအကြိမ်ပေါင်းများစွာမဖန်တီးရန် Singleton ပုံစံကိုမိတ်ဆက်ပေးနိုင်သည်။

ဤဆောင်းပါးသည်သင့်အားပိုမိုထိရောက်သောထိန်းသိမ်းနိုင်သောဒေတာဘေ့စ်စစ်ဆင်ရေးအလွှာကိုတည်ဆောက်ရန်နှင့်သင်၏ဖွံ့ဖြိုးတိုးတက်မှုထိရောက်မှုကိုတိုးတက်စေရန်ကူညီနိုင်သည်ဟုကျွန်ုပ်မျှော်လင့်ပါသည်။