လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PDostatement တွင် multidimensional Array အချက်အလက်များကိုရယူခြင်း၏အဆင့်မြင့်အသုံးပြုမှု :: Fetchobject

PDostatement တွင် multidimensional Array အချက်အလက်များကိုရယူခြင်း၏အဆင့်မြင့်အသုံးပြုမှု :: Fetchobject

gitbox 2025-05-12

PHP တွင် PDO (PHP Data Obserts) တွင်ဒေတာဘေ့စ်ဆက်သွယ်မှုများနှင့်စစ်ဆင်ရေးအတွက် abstraction အလွှာတစ်ခုဖြစ်သည်။ PDostatement :: Fetterobject: query ရလဒ်ကိုအရာဝတ်ထုအဖြစ်ပြန်လည်ပေးပို့နိုင်သည့် PDO မှပေးသော PDO မှပေးသောနည်းလမ်းဖြစ်သည်။ အထူးသဖြင့်ရှု ထောင် ခင်းကျင်းရေးရာအချက်အလက်များကိုကျွန်ုပ်တို့ရရှိရန်လိုအပ်သည့်အချက်အလက်များကိုထပ်မံပြုပြင်ခြင်းနှင့်လည်ပတ်မှုအတွက်ဤနည်းလမ်းသည်အလွန်အဆင်ပြေသည်။

ဤဆောင်းပါးတွင် PDostatement :: FetCoboPJOCTOCTOCTOCT ကိုအသုံးပြုနည်း :: FetCoboPject ကို သုံးရန်ရှာဖွေခြင်းနှင့်လုပ်ငန်းစုံစမ်းရေးရှာဖွေခြင်း၏ထိရောက်မှုကိုတိုးတက်စေရန်ကူညီပေးပါမည်။

1 ။ အခြေခံအသုံးပြုမှု

ပထမ ဦး စွာ pidostatement ၏အခြေခံအသုံးပြုမှု :: FetCOBJOCTOCTOCT ၏အခြေခံအသုံးပြုမှုကိုကြည့်ကြပါစို့။ ကျနော်တို့ PDO ဥပမာကိုဖန်တီးပြီး query sql ကြေညာချက်ကိုကွပ်မျက်ခံခဲ့ကြပါစို့

 <?php
// ဖန်တီး PDO နမူနာ
$pdo = new PDO("mysql:host=localhost;dbname=testdb", "username", "password");

// ကရိယာတန်းဆာ SQL မေးမြန်း
$stmt = $pdo->query("SELECT * FROM users");

// 获取မေးမြန်း结果,အရာဝတ်ထုကိုပြန်ပို့သည်
$user = $stmt->fetchObject();

echo $user->name;  // output အသုံးပြုသူအမည်
?>

အထက်ပါကုဒ်များတွင် FetchObject နည်းလမ်းသည်စုံစမ်းမှုရလဒ်ပထမ ဦး ဆုံးကိုအရာဝတ်ထုတစ်ခုအဖြစ်ပြောင်းလဲခြင်းနှင့်ပြန်လည်ရောက်ရှိလာခြင်းဖြစ်သည်။ ကော်လံတစ်ခုစီ၏အချက်အလက်များသည်အရာဝတ်ထုတစ်ခု၏ attribute တစ်ခုအဖြစ်ပေါ်လာလိမ့်မည်။

2 ။ multi- ရှုထောင်ခင်းကျင်းဒေတာကိုရယူပါ

အကယ်. စုံစမ်းမှုရလဒ်သည်အချက်အလက်များစွာပါ 0 င်ပါကကျွန်ုပ်တို့သည်ပထမအတန်းမဟုတ်ဘဲမှတ်တမ်းများအားလုံးကိုရရန်လိုအပ်သည်။ ဤကိစ္စတွင်ကျွန်ုပ်တို့သည်၎င်းကို fetterobject နှင့် fetchall နည်းလမ်းများနှင့်ပေါင်းစပ်။ လုပ်နိုင်သည်။

 <?php
// ကရိယာတန်းဆာ SQL မေးမြန်း
$stmt = $pdo->query("SELECT * FROM users");

// ဒေတာအားလုံးကိုရယူပါ,အရာဝတ်ထုတစ်ခုခင်းကျင်းပြန်လာပါ
$users = $stmt->fetchAll(PDO::FETCH_OBJ);

// အသုံးပြုသူအားလုံး၏အမည်များကိုကျော်ပြီးထုတ်ယူပါ
foreach ($users as $user) {
    echo $user->name . "<br>";
}
?>

ဤဥပမာတွင် Fetterall (PDO :: Fetdo_obj) သည် query ရလဒ်အားလုံးကိုပြန်ပို့ပြီးဒေတာတစ်ခုစီကိုအရာဝတ်ထုတစ်ခုစီသို့ပြောင်းလဲပြီး array တစ်ခုတွင်သိုလှောင်ထားသည်။ ထို့နောက်ကျွန်ုပ်တို့သည်ဤခင်းကျင်းမှုကိုဤမျှရှိခြင်းဖြင့်ကြားနာခြင်းနှင့်အရာဝတ်ထုတစ်ခုစီ၏ဂုဏ်သတ္တိများကိုရယူနိုင်သည်။

3 ။ ရှုပ်ထွေးသောဒေတာအဆောက်အအုံများကိုလုပ်ဆောင်ရန် Associative Array ကိုသုံးပါ

တခါတရံတွင်ရိုးရှင်းသောအရာဝတ်ထုများကိုရိုးရှင်းသောခင်းကျင်းမှုသည်ကျွန်ုပ်တို့၏လိုအပ်ချက်များကိုဖြည့်ဆည်းရန်မလုံလောက်နိုင်ပါ။ ၎င်းကိုအောင်မြင်ရန် PDostatement :: FetCobobject နှင့် PHP ခင်းပစ်ဆာချောင်းညှိခြင်းများပြုလုပ်နိုင်သည်။

ဥပမာ - multidimensional array များပြုလုပ်ခြင်း

အသုံးပြုသူများ ဇယားနှင့် အမှာစာများအကြားတစ် ဦး နှင့်အမိန့်များ အကြားတစ် ဦး မှများစွာသောဆက်ဆံရေးရှိသည့်အောက်ပါဇယားကွက်များရှိသည့်အောက်ပါဇယားကွက်ကိုကျွန်ုပ်တို့ပိုင်ဆိုင်ထားပါသည်ဆိုပါစို့။

 -- အသုံးပြုသူစားပွဲတင်
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(255)
);

-- အမိန့်ဇယား
CREATE TABLE orders (
    id INT PRIMARY KEY,
    user_id INT,
    order_number VARCHAR(255),
    amount DECIMAL(10, 2)
);

အသုံးပြုသူတစ် ဦး ချင်းစီ၏အချက်အလက်များနှင့်၎င်းတို့၏အမှာစာများအားလုံးကိုရှုထောင့်အမျိုးမျိုးကိုထုတ်လုပ်ရန်ကျွန်ုပ်တို့မေးမြန်းလိုပါသည်။ ဤကိစ္စတွင် FetchObject သည် သုံးစွဲသူနှင့် 4 င်း၏သက်ဆိုင်ရာအမိန့်ဒေတာလိုင်းတစ်ခုစီကိုလိုင်းဖြင့်ပြုလုပ်ရန်နှင့်တစ်ရှုထောင်ခင်းကျင်းဖွဲ့စည်းပုံတစ်ခုသို့စုစည်းရန်ကူညီနိုင်သည်။

 <?php
// မေးမြန်း用户及其订单
$stmt = $pdo->query("
    SELECT users.id AS user_id, users.name AS user_name, orders.order_number, orders.amount
    FROM users
    LEFT JOIN orders ON users.id = orders.user_id
");

// ရလဒ်သိုလှောင်မှုခင်းကျင်း
$usersOrders = [];

// 遍历မေးမြန်း结果并构建多维数组
while ($user = $stmt->fetchObject()) {
    // အသုံးပြုသူသည်ခင်းကျင်းမှုတွင်မပေါ်ပါက,အသုံးပြုသူကိုစတင်ပါ
    if (!isset($usersOrders[$user->user_id])) {
        $usersOrders[$user->user_id] = [
            'user_name' => $user->user_name,
            'orders' => []
        ];
    }

    // အသုံးပြုသူများအတွက်အမှာစာများထည့်ပါ
    $usersOrders[$user->user_id]['orders'][] = [
        'order_number' => $user->order_number,
        'amount' => $user->amount
    ];
}

// multipi- ရှုထောင်ခင်းကျင်း
echo "<pre>";
print_r($usersOrders);
echo "</pre>";
?>

ဤဥပမာတွင်အသုံးပြုသူတစ် ဦး ချင်းစီအတွက်အချက်အလက်များကို ဦး စွာမေးမြန်းသည်။ ထို့နောက်အတန်းတစ်ခုစီ၏အချက်အလက်များကို Fetchocobject မှတစ်ဆင့် ရယူ. ၎င်းကိုတဖြည်းဖြည်းရှုထောင့်အမျိုးမျိုးကိုစုစည်းထားသည်။ နောက်ဆုံးတွင် $ userorderers array ၏ဖွဲ့စည်းပုံသည်အကြမ်းအားဖြင့်အောက်ပါအတိုင်းဖြစ်သည် -

 Array
(
    [1] => Array
        (
            [user_name] => John Doe
            [orders] => Array
                (
                    [0] => Array
                        (
                            [order_number] => A123
                            [amount] => 100.00
                        )
                    [1] => Array
                        (
                            [order_number] => B456
                            [amount] => 150.00
                        )
                )
        )
    [2] => Array
        (
            [user_name] => Jane Smith
            [orders] => Array
                (
                    [0] => Array
                        (
                            [order_number] => C789
                            [amount] => 200.00
                        )
                )
        )
)

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

4 ။ ပိုမိုရှုပ်ထွေးသော data encapsulations များအတွက်ထုံးစံအတန်းကိုသုံးပါ

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

 <?php
// အသုံးပြုသူအမျိုးအစား
class User {
    public $id;
    public $name;
    public $orders = [];

    public function __construct($id, $name) {
        $this->id = $id;
        $this->name = $name;
    }
}

// အမိန့်အမျိုးအစား
class Order {
    public $order_number;
    public $amount;

    public function __construct($order_number, $amount) {
        $this->order_number = $order_number;
        $this->amount = $amount;
    }
}

// မေးမြန်း数据
$stmt = $pdo->query("
    SELECT users.id AS user_id, users.name AS user_name, orders.order_number, orders.amount
    FROM users
    LEFT JOIN orders ON users.id = orders.user_id
");

$users = [];

// အသုံးပြုသူနှင့်အမိန့်အရာဝတ်ထုကိုတည်ဆောက်ပါ
while ($user = $stmt->fetchObject()) {
    if (!isset($users[$user->user_id])) {
        $users[$user->user_id] = new User($user->user_id, $user->user_name);
    }

    $users[$user->user_id]->orders[] = new Order($user->order_number, $user->amount);
}

// output ကိုအရာဝတ်ထုဖွဲ့စည်းပုံ
echo "<pre>";
print_r($users);
echo "</pre>";
?>

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

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

PDostatement :: FetchObject Method ကိုမှတစ်ဆင့်ကျွန်ုပ်တို့သည်မေးမြန်းမှုရလဒ်များကိုရှာဖွေခြင်းရလဒ်များကိုရယူနိုင်ရန်နှင့်အရာဝတ်ထုများကိုအရာ 0 တ်ထုများ, ၎င်းသည်ရိုးရှင်းသောအရာဝတ်ထု တစ်ခု သို့မဟုတ်ပိုမိုရှုပ်ထွေးသောအမျိုးမျိုးသောရှုထောင့်အမျိုးမျိုးတည်ဆောက်ပုံ, ကွဲပြားခြားနားသောအခြေအနေများနှင့်ပေါင်းစပ်ထားသောလက်တွေ့ကျသောအပလီကေးရှင်းများနှင့်ပေါင်းစပ်ပြီး, ဒေတာ encapsulations စသဖြင့်ဒေတာဖွဲ့စည်းပုံကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်နိုင်သည်။

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