လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MySQLI_RESELT ကိုမလုပ်နိုင်သည့်အရာဝတ်ထုတစ်ခုအဖြစ် adapsult လုပ်နည်း

MySQLI_RESELT ကိုမလုပ်နိုင်သည့်အရာဝတ်ထုတစ်ခုအဖြစ် adapsult လုပ်နည်း

M66 2025-05-18

PHP Development တွင် MySQL ဒေတာဘေ့စ်နှင့်အပြန်အလှန်ဆက်သွယ်ရန် MySQLI extension ကို ကျွန်ုပ်တို့မကြာခဏအသုံးပြုလေ့ရှိသည်။ သို့သော် MySQLI_RESult Office ကိုယ်တိုင်သည် traverse quertions or querts များကဲ့သို့ full_assoc () သို့မဟုတ်အခြားအလားတူအရာတစ်ခုနှင့်အခြားအလားတူအရာတစ်ခုသို့မဟုတ်အခြားအလားတူလုပ်ဆောင်မှုများကိုကိုယ်တိုင်ခေါ်ယူရန်လိုအပ်သည်။

ပိုမိုကောင်းမွန်သည့်လုပ်ငန်းစဉ်မေးမြန်းချက်ရလဒ်များကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်နိုင်ရန်အတွက် MySQLI_RESELT ကို ကျွန်ုပ်တို့ query query resolution လုပ်သည့်အခါပိုမိုကောင်းမွန်သောအရာတစ်ခုကိုမစွမ်းဆောင်နိုင်သည့်အရာတစ်ခုအဖြစ် adapcapsate လုပ်နိုင်သည်။ ထို့နောက်ကျွန်ုပ်တို့သည်မည်သို့အောင်မြင်ရန်မည်သို့လေ့လာမည်နည်း။

အဆင့် 1: ITERATE CLASS ကိုဖန်တီးပါ

MySQLI_RESELT ကို မအောင်မြင်စေရန် ITERATER Interface ကိုအကောင်အထည်ဖော်ရန်အတန်းတစ်ခုဖန်တီးနိုင်သည်။ ပထမ ဦး စွာစာသင်ခန်းသည် MySQLI_RESULT OFF ကိုရရှိရန်နှင့် interface method ကိုအကောင်အထည်ဖော်ခြင်းအားဖြင့် Ieration ကိုအထောက်အကူပြုရန်လိုအပ်သည်။

 <?php
class MysqliResultIterator implements Iterator {
    private $result;
    private $currentRow;
    private $currentIndex;

    public function __construct($mysqliResult) {
        $this->result = $mysqliResult;
        $this->currentIndex = 0;
    }

    public function rewind() {
        $this->currentIndex = 0;
        $this->currentRow = $this->result->fetch_assoc();
    }

    public function current() {
        return $this->currentRow;
    }

    public function key() {
        return $this->currentIndex;
    }

    public function next() {
        $this->currentRow = $this->result->fetch_assoc();
        $this->currentIndex++;
    }

    public function valid() {
        return $this->currentRow !== null;
    }
}
?>

ဤအတန်းတွင်ကျွန်ုပ်တို့သည် ITERATER Interface ၏နည်းလမ်းငါးခုကိုအကောင်အထည်ဖော်ရန်ကျွန်ုပ်တို့အကောင်အထည်ဖော်သည်။

  • Rewind () : Iterator ကိုပထမ element သို့ပြန်လည်သတ်မှတ်ပါ။

  • လက်ရှိ () : လက်ရှိ element ကိုပြန်ပို့သည်။

  • key () - လက်ရှိ element ၏အညွှန်းကိန်းကိုပြန်ပို့သည်။

  • လာမယ့် () : နောက် element ကိုရွှေ့ပါ။

  • သက်တမ်းရှိ () - လက်ရှိ element သည်မှန်ကန်မှုရှိမရှိစစ်ဆေးပါ။

ဤနည်းလမ်းများမှတစ်ဆင့် MySQLiresultolliteratiter အတန်းသည်ကျွန်ုပ်တို့အားလည်ပတ်မှုရလဒ်များသို့မဟုတ်အခြားမအောင်မြင်သောအရာဝတ်ထုများကဲ့သို့သောစုံစမ်းမှုရလဒ်များကိုတိုက်ရိုက်ဖြတ်သန်းရန်ခွင့်ပြုသည်။

အဆင့် 2: MySQLIRESETTERORater ကို သုံးပါ

ဤ Iterator အတန်းကိုသတ်မှတ်ပြီးသည်နှင့် MySQLISult Ortoard ကို MySQLiResultiterature အတန်းသို့ဖြတ်သန်းခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်မအောင်မြင်သောအရာတစ်ခုကိုဖန်တီးနိုင်သည်။

 <?php
// သင်ဒေတာဘေ့စ် connection ကိုတည်ထောင်ပြီးစုံစမ်းမှုတစ်ခုကွပ်မျက်ခံရသည်ဆိုပါစို့
$mysqli = new mysqli("localhost", "username", "password", "database");

$query = "SELECT id, name, email FROM users";
$result = $mysqli->query($query);

if ($result) {
    // a MysqliResultIterator ကန့်ကွက်
    $iterator = new MysqliResultIterator($result);

    // သွား foreach Iterative စုံစမ်းမှုရလဒ်များ
    foreach ($iterator as $index => $row) {
        echo "Index: " . $index . "<br>";
        echo "ID: " . $row['id'] . "<br>";
        echo "Name: " . $row['name'] . "<br>";
        echo "Email: " . $row['email'] . "<br><hr>";
    }

    // စုံစမ်းမှုရလဒ်ကိုပိတ်ပါ
    $result->free();
} else {
    echo "Query failed: " . $mysqli->error;
}

$mysqli->close();
?>

အထက်ပါကုဒ်တွင် MySQLiresultitle Object တစ်ခုဖန်တီးပြီးရလဒ်ကိုမေးမြန်းရန် fonteach ကြေငြာချက်မှတစ်ဆင့် ITEREARD ကိုဖန်တီးသည်။ ဤ ITERATER ကိုအသုံးပြုခြင်းသည် code သည် code ကိုပိုမိုအကောက်အမြင်ဖြစ်လာပြီး လက်စွဲစာအုပ် () နည်းလမ်းကိုလက်စွဲစာအုပ်သို့ခေါ်ဆိုခြင်းအားရှောင်ရှားနိုင်သည်ကိုသင်တွေ့လိမ့်မည်။

အဆင့် 3: ITERATER ကိုပိုကောင်းအောင်လုပ်ပါ (optional)

အချက်အလက်မျိုးစုံကိုထောက်ပံ့ခြင်းကဲ့သို့သောပြောင်းလွယ်ပြင်လွယ်သောအင်္ဂါရပ်များလိုအပ်ပါက (iance array arrays, numeric arrays စသဖြင့်) ပိုမိုရွေးချယ်စရာများကိုထောက်ပံ့ရန် ITERATH ကိုထပ်မံချဲ့ထွင်နိုင်သည်။ ဥပမာအားဖြင့်, အချက်အလက်များကိုအပေါင်းအသင်းတစ်ခုသို့မဟုတ်နံပါတ်များကိုခင်းကျင်းခြင်းပုံစံဖြင့်အချက်အလက်များကိုပြန်ပို့မလားဆိုသည်ကိုဖော်ပြရန် parameter ကိုထည့်ပါ။

 <?php
class MysqliResultIterator implements Iterator {
    private $result;
    private $currentRow;
    private $currentIndex;
    private $fetchType;

    public function __construct($mysqliResult, $fetchType = MYSQLI_ASSOC) {
        $this->result = $mysqliResult;
        $this->currentIndex = 0;
        $this->fetchType = $fetchType;
    }

    public function rewind() {
        $this->currentIndex = 0;
        $this->currentRow = $this->result->fetch_array($this->fetchType);
    }

    public function current() {
        return $this->currentRow;
    }

    public function key() {
        return $this->currentIndex;
    }

    public function next() {
        $this->currentRow = $this->result->fetch_array($this->fetchType);
        $this->currentIndex++;
    }

    public function valid() {
        return $this->currentRow !== null;
    }
}
?>

ဤတိုးတက်မှုနှင့်အတူ activitive ခင်းကျင်းသို့မဟုတ်ကိန်းဂဏန်းများကိုပြန်ပို့ရန် MySQLI_ASSOSOC သို့မဟုတ် MySQLI_NAUS ကို အသုံးပြု. ကြားဖြတ်ကိရိယာတစ်ခုဖန်တီးသည့်အခါ quertator ကိုဖန်တီးသောအခါစုံစမ်းမှုပုံစံကိုသင်သတ်မှတ်နိုင်သည်။

အကျဉ်းချုပ်

MySQLI_RESELT သို့ iterator interface ကိုအကောင်အထည်ဖော်သည့်အရာဝတ်ထုတစ်ခုကို encapsult လုပ်ခြင်းဖြင့်ဒေတာဘေ့စ်စုံစမ်းမှုများကိုပိုမိုလွယ်ကူစွာပြုလုပ်နိုင်သည်။ ၎င်းသည် code ကိုအတိုချုပ်ပြုလုပ်နိုင်ရုံသာမကပြောင်းလွယ်ပြင်လွယ်များကိုလည်းပိုမိုပေးစွမ်းနိုင်ပြီးမတူကွဲပြားသောစုံစမ်းမှုရလဒ်များကိုပိုမိုကောင်းမွန်စွာကိုင်တွယ်နိုင်သည်။

ဤ encapsulationultulation Method သည် code ၏ထိန်းသိမ်းမှုနှင့်ဖတ်နိုင်မှုကိုအထူးသဖြင့်အချက်အလက်အမြောက်အများလိုအပ်သည့်အခြေအနေများအတွက်ထိန်းသိမ်းထားနိုင်မှုနှင့်ဖတ်နိုင်မှုကိုများစွာတိုးတက်စေနိုင်သည်။