PDostatement :: DetBase စစ်ဆင်ရေးအတွက် PDO ကိုအသုံးပြုသည့်အခါ fetterobject သည်အလွန်အဆင်ပြေသောလုပ်ဆောင်ချက်ဖြစ်သည်။ ၎င်းသည်ရှာဖွေမှုရလဒ်များကိုအရာဝတ်ထုများထဲသို့တိုက်ရိုက် encapsulate, လက်စွဲတာ 0 န်၏အခက်အခဲများကိုလျှော့ချနိုင်သည်။ သို့သော်မလျော်ကန်စွာအသုံးပြုပါက၎င်းသည်ပြ problems နာများဖြစ်ပေါ်စေနိုင်သည်။
ဤဆောင်းပါးသည်မိတ္တူဆိုင်သောဒေတာအရာဝတ်ထုများကိုမတင်ရန်ရှောင်ရှားရန် မှန်ကန်စွာနှင့်ထိရောက်စွာမည်သို့ထိရောက်စွာအသုံးပြု ရမည် ကိုသင်ကြားပေးမည်။
PHP တွင် PDostatement :: FetCoBjection နည်းလမ်းသည်ဒေတာဘေ့စ်စုံစမ်းမှုမှဒေတာ query မှအချက်အလက်များတစ်ခုတည်းကိုစာသင်ခန်းတစ်ခုတွင်ဖော်ပြထားသည်။ နမူနာကုဒ်သည်အောက်ပါအတိုင်းဖြစ်သည် -
<?php
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'pass');
$stmt = $pdo->query('SELECT id, name FROM users');
while ($user = $stmt->fetchObject()) {
echo $user->id . ': ' . $user->name . '<br>';
}
?>
ပုံမှန်အားဖြင့် FetchocboPJOCTOCT သည် ပုံမှန်လူတန်းစား ( stdclass ) အရာဝတ်ထုတစ်ခုသို့ပြန်ပို့သည်။
သင်၏မေးမြန်းချက်ရလဒ်များတွင်မှတ်တမ်းများပွားများရှိသည့်မှတ်တမ်းများရှိပါကတူညီသောအချက်အလက်များမှာလည်းတူညီသောအချက်အလက်များတွင်တူညီသောအချက်အလက်များနှင့်တူညီသောအရာဝတ်ထုကို Fetchbobject မှတစ်ဆင့်တိုက်ရိုက်ပြုလုပ်ပြီး တူညီသောအချက်အလက်များနှင့်ကွဲပြားခြားနားသောအရာဝတ်ထုဖြစ်ရပ်များကိုဖန်တီးလိမ့်မည် ။
ဥပမာအားဖြင့်:
$user1 = $stmt->fetchObject();
$user2 = $stmt->fetchObject();
// သော်လည်း user1 နှင့် user2 ၏ id အတူတူဖြစ်သော,它们也是不同၏对象
ဤသည်မိတ္တူပွားသည်မှတ်ဥာဏ်သည်မှတ်ဉာဏ်ကိုဖြုန်းတီးပစ်ရုံသာမကအထူးသဖြင့်စီမံကိန်းကြီးများသို့မဟုတ်ရှုပ်ထွေးသောဒေတာအသင်းခွဲများတွင်ရှေ့နောက်မညီသောအချက်အလက်များနှင့်ပြ problems နာများကိုလည်းပြ problems နာဖြစ်စေနိုင်သည်။
အရာဝတ်ထုတစ်ခုကို FetchOccoboject မှတဆင့်ထုတ်လုပ်သည့်အခါတိုင်းတူညီသော ID နှင့်အတူအရာဝတ်ထုတစ်ခုရှိပြီးသားရှိမရှိစစ်ဆေးပါ။ အကယ်. ၎င်းသည်တည်ရှိပါကပြန်လည်အသုံးပြုပြီးပြန်လည်အသုံးပြုမည်မဟုတ်ပါ။
ဥပမာ -
<?php
class User {
public $id;
public $name;
}
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'pass');
$stmt = $pdo->query('SELECT id, name FROM users');
$users = []; // 用来缓存已经加载၏对象
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$id = $row['id'];
if (!isset($users[$id])) {
$user = new User();
$user->id = $row['id'];
$user->name = $row['name'];
$users[$id] = $user;
}
// ပြီးသားတည်ရှိလျှင်,ပြန်လည်အသုံးပြု $users[$id]
}
ဤလက်စွဲစာအုပ်လုပ်ဆောင်ခြင်းသည်တူညီသောအချက်အလက်များကိုတစ်ကြိမ်သာစဉ်းစားရန်သေချာစေနိုင်သည်။
၎င်းကို Class Constructor တွင် FetCObjectobject တွင် FetCoboPject တွင်ဖြတ်သန်းခြင်းနှင့် ID Constructor တွင်အကောင်အထည်ဖော်ခြင်းအားဖြင့်၎င်းကိုထပ်မံအလိုအလျောက်ပြုလုပ်နိုင်သည်။
ဥပမာအားဖြင့်:
<?php
class User {
private static $instances = [];
public $id;
public $name;
public function __construct() {
// ပြင်ပညွှန်ကြားချက်တားမြစ် new,အသုံးပြု create နည်းလမ်း
}
public static function create($row) {
if (isset(self::$instances[$row['id']])) {
return self::$instances[$row['id']];
}
$obj = new self();
$obj->id = $row['id'];
$obj->name = $row['name'];
self::$instances[$row['id']] = $obj;
return $obj;
}
}
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'pass');
$stmt = $pdo->query('SELECT id, name FROM users');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$user = User::create($row);
}
?>
ပျင်းရိ သော လူများသည်ပျင်းရိသူများအနေဖြင့်အရာဝတ်ထုများကိုလျင်မြန်စွာတည်ဆောက်ရန်အတွက်အထောက်အကူပြုသော်လည်းစီမံကိန်းတွင်စွမ်းဆောင်ရည်မြင့်မားခြင်းနှင့်အရာဝတ်ထုဘဝသံသရာကိုစီမံခန့်ခွဲရန်လိုအပ်သည့်အခါအနည်းငယ်ထိန်းချုပ်ရန်အကျိုးရှိသည်။
တခါတရံ SQL Query များကိုကောင်းစွာရေးသားထားသောကြောင့်, ဥပမာအားဖြင့်, သင်သည်ပူးပေါင်းလုပ်ဆောင်သည့်အခါမှန်ကန်စွာမကျွေးပါက,
မှန်ကန်သောနည်းလမ်းမှာပြန်လာသောဒေတာများကိုထိန်းချုပ်ရန်အတွက်ကွဲပြား သော အုပ်စု ( သို့) sququery ကို SQL တွင်အသုံးပြုရန်ဖြစ်သည်။
ဥပမာအားဖြင့်:
SELECT DISTINCT users.id, users.name
FROM users
LEFT JOIN orders ON orders.user_id = users.id
၎င်းသည်အချက်အလက်များ၏ရင်းမြစ်တွင်မိတ္တူပွားမှတ်တမ်းများကိုလျှော့ချပြီးပြ the နာကိုအခြေခံအားဖြင့်ဖြေရှင်းနိုင်သည်။
PDostatement :: Fetchobject ကိုအသုံးပြုပြီးဖြစ်သော်လည်းအရာဝတ်ထု၏ထူးခြားမှုကိုသင်အာရုံစိုက်သင့်သည်။ အကျဥ်းရုံးသည်:
ကြီးမားသောစီမံကိန်းများအတွက် Object Cache သို့မဟုတ် Object Pooling Mode နှင့်ပူးပေါင်းရန်အကြံပြုသည်။
သေးငယ်တဲ့စီမံကိန်းတွေအတွက် SQL ကို optizerly optizerizing sql သည်ပုံတူပွားမှုအများဆုံးပြ problems နာများကိုရှောင်ရှားနိုင်သည်။
အကယ်. တင်းကျပ်သောအရာဝတ်ထုစီမံခန့်ခွဲမှုလိုအပ်ပါက FetchOccobject လုပ်ငန်းစဉ်ကိုကိုယ်တိုင် encapsulating ကိုသင်စဉ်းစားနိုင်သည်။
PDO ကျွမ်းကျင်မှုအကြောင်းပိုမိုလေ့လာလိုပါကသို့မဟုတ် PHP Data Access Layer Encapsulationsulationsulations လိုအပ်ပါက https:/gitbox.net/php-Troments များကို ပိုမိုအသေးစိတ်ဖော်ပြရန်အကြံပြုသည်။