PHP Development တွင် MySQL ဒေတာဘေ့စ်နှင့်အပြန်အလှန်ဆက်သွယ်ရန် MySQLI extension ကို ကျွန်ုပ်တို့မကြာခဏအသုံးပြုလေ့ရှိသည်။ သို့သော် MySQLI_RESult Office ကိုယ်တိုင်သည် traverse quertions or querts များကဲ့သို့ full_assoc () သို့မဟုတ်အခြားအလားတူအရာတစ်ခုနှင့်အခြားအလားတူအရာတစ်ခုသို့မဟုတ်အခြားအလားတူလုပ်ဆောင်မှုများကိုကိုယ်တိုင်ခေါ်ယူရန်လိုအပ်သည်။
ပိုမိုကောင်းမွန်သည့်လုပ်ငန်းစဉ်မေးမြန်းချက်ရလဒ်များကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်နိုင်ရန်အတွက် MySQLI_RESELT ကို ကျွန်ုပ်တို့ query query resolution လုပ်သည့်အခါပိုမိုကောင်းမွန်သောအရာတစ်ခုကိုမစွမ်းဆောင်နိုင်သည့်အရာတစ်ခုအဖြစ် adapcapsate လုပ်နိုင်သည်။ ထို့နောက်ကျွန်ုပ်တို့သည်မည်သို့အောင်မြင်ရန်မည်သို့လေ့လာမည်နည်း။
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 အတန်းသည်ကျွန်ုပ်တို့အားလည်ပတ်မှုရလဒ်များသို့မဟုတ်အခြားမအောင်မြင်သောအရာဝတ်ထုများကဲ့သို့သောစုံစမ်းမှုရလဒ်များကိုတိုက်ရိုက်ဖြတ်သန်းရန်ခွင့်ပြုသည်။
ဤ 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 ကိုပိုမိုအကောက်အမြင်ဖြစ်လာပြီး လက်စွဲစာအုပ် () နည်းလမ်းကိုလက်စွဲစာအုပ်သို့ခေါ်ဆိုခြင်းအားရှောင်ရှားနိုင်သည်ကိုသင်တွေ့လိမ့်မည်။
အချက်အလက်မျိုးစုံကိုထောက်ပံ့ခြင်းကဲ့သို့သောပြောင်းလွယ်ပြင်လွယ်သောအင်္ဂါရပ်များလိုအပ်ပါက (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 ၏ထိန်းသိမ်းမှုနှင့်ဖတ်နိုင်မှုကိုအထူးသဖြင့်အချက်အလက်အမြောက်အများလိုအပ်သည့်အခြေအနေများအတွက်ထိန်းသိမ်းထားနိုင်မှုနှင့်ဖတ်နိုင်မှုကိုများစွာတိုးတက်စေနိုင်သည်။