လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PDostatement :: Fetchobject သည်အရာဝတ်ထုဂုဏ်သတ္တိများနှင့်အတူပြ esh နာဖြေရှင်းခြင်းနည်းလမ်းကိုပြန်ပို့သည်

PDostatement :: Fetchobject သည်အရာဝတ်ထုဂုဏ်သတ္တိများနှင့်အတူပြ esh နာဖြေရှင်းခြင်းနည်းလမ်းကိုပြန်ပို့သည်

gitbox 1970-01-01

PDostatement :: Fetterobjectobjectobject () ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် PDO ကိုအသုံးပြုသည့်အခါအလွန်အသုံးများသောနည်းလမ်းဖြစ်သည်။ ၎င်းသည်ရလဒ်ကိုလွယ်ကူစွာဝင်ရောက်နိုင်ရန်အတွက်အရာဝတ်ထုတစ်ခုထဲသို့သတ်မှတ်ထားသည့်ရလဒ်ကိုတိုက်ရိုက်မြေပုံဆွဲနိုင်သည်။ သို့သော်တစ်ခါတစ်ရံတွင် developer များသည်ထူးဆန်းသောပြ problem နာတစ်ခု နှင့် ကြုံတွေ့ရလိမ့်မည်။

ဒီတော့ဒီပြ problem နာကိုခြေလှမ်းတစ်ဆင့်ဘယ်လိုပြေလည်သင့်သလဲ။ အောက်ဖော်ပြပါအသေးစိတ်ကိုလေ့လာကြပါစို့။

1 ။ SQL query သည်အချက်အလက်များကိုမှန်ကန်စွာပြန်ပို့သည်ကိုစစ်ဆေးပါ

ပထမအဆင့်မှာသင်၏ 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 ကိုမှတ်တမ်းတင်ရန်ကိရိယာများကိုသုံးနိုင်သည်။

2 ။ စုံစမ်းမှုနယ်ပယ်သည်အရာဝတ်ထု attribute များနှင့်ကိုက်ညီမှုရှိမရှိအတည်ပြုပါ

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 နာမရှိပါ။

3 ။ FetchObject ကိုအသုံးပြုသောအခါအတန်းအစားအမည်ကိုသတ်မှတ်သည်ကိုစစ်ဆေးပါ

ပုံမှန်အားဖြင့် 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 () ကို ပုံမှန်သတ်မှတ်နိုင်သည်။

4 ။ ဒေတာဘေ့စ်မှပြန်လာသောပြ problems နာများကိုဂရုပြုပါ

အချို့သောဒေတာဘေ့စ်များတွင် (အထူးသဖြင့် Postgresqlqlql) တွင်ပြန်လာသောနယ်ပယ်အမည်များသည်သင်ထင်သောအရာနှင့်ကွဲပြားခြားနားသောအမှုဖြစ်နိုင်သည်။ ဤသည် attribute ကိုတာဝန်ကျလိမ့်မယ်။

PDO ကိုဖန်တီးသောအခါ case attribute ချိန်ညှိချက်များကိုသင်ထည့်နိုင်သည်။

 <?php
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password', [
    PDO::ATTR_CASE => PDO::CASE_NATURAL
]);

၎င်းသည်ဒေတာဘေ့စ်ကိုမူရင်းအမှု၏မူလအမှုကိုပြန်ပို့ခြင်းနှင့်ကိုက်ညီမှုမရှိသောမအောင်မြင်မှုများကိုရှောင်ရှားသည်။

5 ။ အထက်ဖော်ပြပါအားလုံးပုံမှန်အတိုင်းဖြစ်ပါက Verify လုပ်ရန် Fetdo ::Class ကိုသုံးပါ

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 များကိုလည်း သင်ဝင်ရောက်ကြည့်ရှုနိုင်သည်။