PDO သည် ဒေတာဘေ့စ်ဖွံ့ဖြိုးတိုးတက်မှုအတွက် PHP ကိုအသုံးပြုသည့်အခါအလွန်လူကြိုက်များသော database abstraction layer interface ဖြစ်သည်။ PDostatement :: FetchObject Method သည်ရလဒ်ရယူသည့်အခါအချက်အလက်များကိုလူတန်းစားဥပမာတစ်ခုသို့တိုက်ရိုက်မြေပုံဆွဲရန်ခွင့်ပြုသည်။ စားပွဲတစ်ခုတည်းတွင်မေးမြန်းသောအခါ၎င်းသည်များသောအားဖြင့်အလွန်ချောမွေ့သည်, အောက်ဖော်ပြပါ, ကျွန်ုပ်တို့သည်ဤဘုံအမှားများကိုအသေးစိတ်ခွဲခြမ်းစိတ်ဖြာပါလိမ့်မည်။
ပြနာဖော်ပြချက်:
စားပွဲများစွာကိုရှာဖွေသည့်အခါအမည်နှင့်တူညီသောအမည်နှင့်အတူကွက်လပ်များသည်ကွဲပြားသောစားပွဲများတွင်တည်ရှိနိုင်သည် (ဥပမာ - ID , name ) ။ Fetchobject ကို အသုံးပြုသောအခါခွဲခြားခြင်းမရှိပါကဤနယ်ပယ်များ၏တန်ဖိုးများကိုရလဒ်မှတန်ဖိုးများကိုအစားထိုးခြင်း,
နမူနာကုဒ်:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'password');
$sql = "SELECT users.id, users.name, orders.id, orders.amount FROM users
INNER JOIN orders ON users.id = orders.user_id";
$stmt = $pdo->query($sql);
while ($obj = $stmt->fetchObject()) {
var_dump($obj);
}
?>
ပြ problem နာကိုပြသခြင်း
ဤတွင် အသုံးပြုသူများ နှင့် အမှာစာများသည် ပ conflicts ိ ပက် ခများရှိလိမ့်မည်။
ဖြေရှင်းချက် -
ရှာဖွေရေးတွင်ခွဲခြားရန် ကွင်းဆင်း alias ကို သုံးပါ။
ပြန်လည်ပြင်ဆင်ထားသောဗားရှင်းကုဒ်:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'password');
$sql = "SELECT users.id AS user_id, users.name AS user_name,
orders.id AS order_id, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id";
$stmt = $pdo->query($sql);
while ($obj = $stmt->fetchObject()) {
echo "အသုံးပြုသူID: {$obj->user_id}, အသုံးပြုသူ名: {$obj->user_name}, အမိန့်ID: {$obj->order_id}, စုပေါင်း: {$obj->amount}<br>";
}
?>
ကွဲပြားခြားနားသော alias ကိုလယ်ကွင်းအတွက်သတ်မှတ်ခြင်းအားဖြင့်အိမ်ခြံမြေ overwriting ကိုရှောင်ရှားနိုင်သည်။
ပြနာဖော်ပြချက်:
FetchOccokject ပံ့ပိုးမှုစင်တာအတန်းအမည်ရှိ parameter ဖြင့်ဖြတ်သန်းခြင်းနှင့်ဒေတာများကိုဤအတန်း၏ဥပမာအားဖြင့်မြေပုံရေးဆွဲခြင်း။ သို့သော်, Class attribute သည်စုံစမ်းမှုရလဒ်၏နယ်ပယ်အမည်နှင့်မကိုက်ညီပါကမြေပုံသည် မအောင်မြင် ပါ,
နမူနာအတန်းများနှင့်မေးမြန်းချက်များကိုနမူနာ:
<?php
class UserOrder {
public $user_id;
public $user_name;
public $order_id;
public $amount;
}
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'password');
$sql = "SELECT users.id AS user_id, users.name AS user_name,
orders.id AS order_id, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id";
$stmt = $pdo->query($sql);
while ($order = $stmt->fetchObject('UserOrder')) {
var_dump($order);
}
?>
မှတ်စုများ
အတန်းထဲတွင် attribute name သည်တွေ့ရသောလယ်ကွင်းအမည်နှင့်ကိုက်ညီရမည်။
PHP သည်စာလုံးအကြီးအသေးအရေးမကြီးပါ။ ဒေတာဘေ့စ်အကွက်နှင့် class attribute case သည်ကိုက်ညီမှုမရှိပါက၎င်းသည်တာ 0 န်ပျက်ကွက်မှုကိုဖြစ်စေနိုင်သည်။
ပြနာဖော်ပြချက်:
အသုံးပြုသူတစ် ဦး တွင်အမှာစာများစွာရှိပါကပူးတွဲစစ်ဆေးမှုတွင်မှတ်တမ်းမျိုးစုံပြန်လည်ပေးပို့လိမ့်မည်။ FetchOccobject ကို ဖြတ်သန်းရန် FetchocBOCT ကိုတိုက်ရိုက်သုံးသောအခါအချက်အလက်များကိုခွဲခြားရန်နှင့်အမျိုးအစားခွဲခြားခြင်းကိုလျစ်လျူရှုရန်လွယ်ကူသည်။
ဖြေရှင်းချက် -
စီးပွားရေးလိုအပ်ချက်များအရသင်သည်ပထမအုပ်စုဖွဲ့ခြင်းသို့မဟုတ်၎င်းကိုလိုအပ်သောအသိုက်ဖွဲ့စည်းပုံသို့၎င်းကိုကိုယ်တိုင်စုစည်းသင့်သည်။
သာဓကဥပမာ -
<?php
$orders = [];
while ($row = $stmt->fetchObject('UserOrder')) {
$userId = $row->user_id;
if (!isset($orders[$userId])) {
$orders[$userId] = [
'user_name' => $row->user_name,
'orders' => [],
];
}
$orders[$userId]['orders'][] = [
'order_id' => $row->order_id,
'amount' => $row->amount,
];
}
?>
၎င်းသည်တူညီသောအသုံးပြုသူမှအမှာစာမျိုးစုံကိုအတူတကွခွဲထားရန်ခွင့်ပြုထားသည်။
အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်ဒေတာဘေ့စ်နှင့်ချိတ်ဆက်ပြီးခြွင်းချက်များကိုကိုင်တွယ်သည့်အခါအပြည့်အဝဆက်သွယ်မှု string ကိုသုံးရန်အကြံပြုသည်။ ဥပမာအားဖြင့်:
<?php
try {
$pdo = new PDO('mysql:host=gitbox.net;dbname=testdb;charset=utf8mb4', 'user', 'password', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
} catch (PDOException $e) {
echo "ဆက်သွယ်မှုမအောင်မြင်ပါ: " . $e->getMessage();
}
?>
ဤနေရာတွင်ကျွန်ုပ်တို့သည် Domain Name ကို GitBox.net ဖြင့်အစားထိုးလိုက်သည်။ ၎င်းသည်သင်၏လိုအပ်ချက်များနှင့်ကိုက်ညီသည်။
PDostatement :: FetCoboPject ကို သုံးရန် Multi-table ပူးတွဲရှာဖွေမှုရလဒ်များကိုလုပ်ဆောင်ရန်အောက်ပါအချက်များကိုဂရုပြုသင့်သည်။
လယ်ပြင်ပ conflicts ိပက်ခများကိုခွဲခြားရန် alias ကိုသုံးပါ ။
Class Attribute သည် Query Field အမည်နှင့်အတိအကျဆက်သွယ်ရမည် ။
မျိုးစုံနှင့်ဆက်စပ်သောဒေတာ၏စနစ်တကျအပြောင်းအလဲနဲ့ ။
ခြွင်းချက်ကိုင်တွယ်ခြင်းနှင့်ဆက်သွယ်မှုလုံခြုံရေးကိုအာရုံစိုက်ပါ ။
ဤအသေးစိတ်အချက်အလက်များကိုဂရုပြုရုံသာ code ကိုပိုမိုကြော့ရှင်းပြီးဖတ်နိုင်ရန်အတွက် FetCObjectobject ကို သုံးပါ။
သက်ဆိုင်သောတက်(ဂ်)များ:
PDOStatement