PDostatement :: Fetterobjectobjectobject () ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် PDO ကိုအသုံးပြုသည့်အခါအလွန်အသုံးများသောနည်းလမ်းဖြစ်သည်။ ၎င်းသည်ရလဒ်ကိုလွယ်ကူစွာဝင်ရောက်နိုင်ရန်အတွက်အရာဝတ်ထုတစ်ခုထဲသို့သတ်မှတ်ထားသည့်ရလဒ်ကိုတိုက်ရိုက်မြေပုံဆွဲနိုင်သည်။ သို့သော်တစ်ခါတစ်ရံတွင် developer များသည်ထူးဆန်းသောပြ problem နာတစ်ခု နှင့် ကြုံတွေ့ရလိမ့်မည်။
ဒီတော့ဒီပြ problem နာကိုခြေလှမ်းတစ်ဆင့်ဘယ်လိုပြေလည်သင့်သလဲ။ အောက်ဖော်ပြပါအသေးစိတ်ကိုလေ့လာကြပါစို့။
ပထမအဆင့်မှာသင်၏ SQL query ကိုယ်နှိုက်သည်အချက်အလက်များကိုမှန်ကန်စွာပြန်ပို့နိုင်ကြောင်းအတည်ပြုရန်ဖြစ်သည်။ Fetterobject မပြုလုပ်မီ၎င်းကို Fetch (PDO :: Fetter_assoc) ဖြင့်စမ်းသပ်နိုင်သည်။
နမူနာကုဒ်:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
$sql = "SELECT id, name, email FROM users WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(['id' => 1]);
$data = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($data);
?>
အကယ်. $ ဒေတာ မှားယွင်းသော ဖြစ်လျှင်၎င်းသည် SQL query ကိုယ်နှိုက်သည်မည်သည့်အချက်အလက်မျှမတွေ့ရဟုဆိုလိုသည်။ အကယ်. $ ဒေတာ သည်ခင်းကျင်းမှုတစ်ခုဖြစ်ပါကနောက်တစ်ဆင့်ကိုသင်ဆက်လက်ပြုလုပ်နိုင်သည်။
ထိပ်ဖ်ား: debugging stage တွင် Gitbox.net တွင်ဆန်းစစ်လေ့လာရန်ကူညီရန်ပေါ့ပါးသောမှတ်တမ်းစနစ်ကိုဖြန့်ချိရာတွင် SQL Logs ကိုမှတ်တမ်းတင်ရန်ကိရိယာများကိုသုံးနိုင်သည်။
Fetchobject () () သည် အရာဝတ်ထုအားအရာဝတ်ထုအားကော်လံအမည်အရအရာဝတ်ထုကိုတိုက်ရိုက်သတ်မှတ်ရန်ကြိုးစားလိမ့်မည်။ ကော်လံအမည်သည်တရားဝင် PHP attribute အမည်မဟုတ်ပါက တန်ဖိုးကိုမှန်ကန်စွာ သတ်မှတ်. မရပါ။
ဥပမာအားဖြင့်:
SELECT id AS "user id", name, email FROM users
အထက်တွင်ဖော်ပြခဲ့သည့်အတိုင်း "User ID" သည်တရားမ 0 င်သောအိမ်ခြံမြေအမည်ဖြစ်ပြီးရရှိလာသောအရာဝတ်ထုသည် အသုံးပြုသူ ID attribute မရှိပါ။
မှန်ကန်သောချဉ်းကပ်မှုသည်ကော်လံအမည်များသည်စံသတ်မှတ်ချက်အမည်များဖြစ်ပြီး,
ဥပမာအားဖြင့်:
SELECT id AS user_id, name, email FROM users
ဤနည်းအားဖြင့်မြေပုံနှင့်အတူပြ problem နာမရှိပါ။
ပုံမှန်အားဖြင့် FetchObjectobject () STDCLAST အရာဝတ်ထုကိုပြန်ပို့သည်။ အကယ်. သင်သည်အတန်းအစားအမည်ကိုဖြတ်သန်းသွားပါကဤအတန်း၏ဂုဏ်သတ္တိများကို အကာအကွယ်ပေးသော်လည်း လျှို့ဝှက်ထားသည့် အတွက်တာဝန်ကျေပွန်တော့မည်။
ဥပမာ -
<?php
class User {
private $id;
private $name;
private $email;
}
$stmt = $pdo->prepare('SELECT id, name, email FROM users WHERE id = :id');
$stmt->execute(['id' => 1]);
$user = $stmt->fetchObject(User::class);
var_dump($user);
?>
အသုံးပြုသူ အတန်းအစား၏ဂုဏ်သတ္တိများသည် လျှို့ဝှက်ထားသည့် အတွက် PDO သည်သူတို့၏တာ 0 န်များကိုတိုက်ရိုက်မ 0 င်နိုင်သဖြင့်အရာဝတ်ထုသည် "ဗလာ" ဖြစ်သည်။
ဖြေရှင်းချက် -
သို့မဟုတ် attribute ကို အများပြည်သူသို့ ပြောင်းပါ
သို့မဟုတ် __set () မှော်နည်းလမ်းကို dynamic assignment ကိုကိုင်တွယ်ရန်အတန်းသို့ Add ထည့်ပါ
မှန်ကန်သောသရုပ်ပြခြင်း -
<?php
class User {
public $id;
public $name;
public $email;
}
သို့မဟုတ်:
<?php
class User {
private $data = [];
public function __set($name, $value) {
$this->data[$name] = $value;
}
}
ဤနည်းအားဖြင့် FetchObject () ကို ပုံမှန်သတ်မှတ်နိုင်သည်။
အချို့သောဒေတာဘေ့စ်များတွင် (အထူးသဖြင့် Postgresqlqlql) တွင်ပြန်လာသောနယ်ပယ်အမည်များသည်သင်ထင်သောအရာနှင့်ကွဲပြားခြားနားသောအမှုဖြစ်နိုင်သည်။ ဤသည် attribute ကိုတာဝန်ကျလိမ့်မယ်။
PDO ကိုဖန်တီးသောအခါ case attribute ချိန်ညှိချက်များကိုသင်ထည့်နိုင်သည်။
<?php
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password', [
PDO::ATTR_CASE => PDO::CASE_NATURAL
]);
၎င်းသည်ဒေတာဘေ့စ်ကိုမူရင်းအမှု၏မူလအမှုကိုပြန်ပို့ခြင်းနှင့်ကိုက်ညီမှုမရှိသောမအောင်မြင်မှုများကိုရှောင်ရှားသည်။
fetterobject () တွင်ပြ a နာတစ်ခုသာရှိပါက OTTOS configuration သို့မဟုတ် binding method method တွင်မည်သည့်ကွဲပြားခြားမှုရှိ,
<?php
$stmt = $pdo->prepare('SELECT id, name, email FROM users');
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_CLASS, User::class);
foreach ($users as $user) {
var_dump($user);
}
?>
အကယ်. ဤအောင်မြင်ပါက၎င်းသည်သီးခြား fetterobject () parameter transmission, Excameter Order သို့မဟုတ် Data Data ပြ problem နာများကြောင့်၎င်းကိုဖြစ်ပေါ်စေနိုင်သည်။
PDostatement ပြ esh နာဖြေရှင်းခြင်း၏ဘုံစိတ်ကူး :: Fetchobject () အချည်းနှီးသောအရာဝတ်ထုများကိုပြန်ပို့သည်။
ဒေတာရှိလျှင် SQL query ကိုယ်နှိုက်
လယ်ကွင်းနာမည်ကျိုးကြောင်းဆီလျော်ပါသလား
ပစ်မှတ်အတန်းအစား attribute အများပြည်သူ ?
စာလုံးပေါင်း sensitivity ကိုပြ issues နာများ
ပြောင်းလဲနေသောတာ 0 န်ကိုကူညီရန်မှော်နည်းလမ်းများကိုသုံးပါ
စုံစမ်းစစ်ဆေးမှုအဆင့်ဆင့်ပြီးနောက်သင်သည်များသောအားဖြင့်သတ်သတ်မှတ်မှတ်အကြောင်းပြချက်များကိုရှာဖွေတွေ့ရှိနိုင်ပြီးပြ the နာကိုလျင်မြန်စွာဖြေရှင်းနိုင်သည်။
Database Tuning Tips အကြောင်းပိုမိုလေ့လာလိုပါက https://gitbox.net/database-tips များကိုလည်း သင်ဝင်ရောက်ကြည့်ရှုနိုင်သည်။