လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PDostatement :: Php 5 နှင့် PHP 7 နှင့်တွဲဖက်နိုင်မှုပြ issues နာများကိုရယူခြင်း

PDostatement :: Php 5 နှင့် PHP 7 နှင့်တွဲဖက်နိုင်မှုပြ issues နာများကိုရယူခြင်း

gitbox 2025-05-12

ဒေတာဘေ့စ်ဖွံ့ဖြိုးတိုးတက်ရေးအတွက် PHP အတွက် PHP ကိုအသုံးပြုသောအခါ PDostatement :: Fetchobject သည် query ကိုတိုက်ရိုက်မြေပုံရေးဆွဲခြင်းကိုအရာဝတ်ထုတစ်ခုသို့တိုက်ရိုက်မြေပုံဆွဲနိုင်သည့်အလွန်လက်တွေ့ကျသောနည်းလမ်းဖြစ်သည်။ သို့သော် PHP 5 နှင့် PHP 7 တွင် Tetebject ၏အပြုအမူအတွက်သိမ်မွေ့သော်လည်းအရေးကြီးသောကွဲပြားခြားနားမှုအချို့ရှိပါသည်။ ဤလိုက်ဖက်တဲ့ပြ issues နာတွေကိုနားမလည်နိုင်တဲ့ဒီလိုက်ဖက်တဲ့ပြ issues နာတွေကိုနားမလည်နိုင်တဲ့အရာကမတူညီတဲ့ဗားရှင်းတွေမှာမကြဲထားတဲ့အမှားတွေကိုဖြစ်စေနိုင်တယ်။

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

1 ။ အခြေခံအသုံးပြုမှုကိုပြန်လည်သုံးသပ်

PDostatement ၏အခြေခံအသုံးပြုမှု :: Fetchobject သည် ရလဒ်အနေဖြင့်ရလဒ်မှအတန်းတစ်ခုကိုယူရန်ဖြစ်သည်။

 <?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->query('SELECT id, name FROM users');
$user = $stmt->fetchObject();

echo $user->id;
echo $user->name;
?>

ပုံမှန်ပြန်လာခြင်းသည် stdclass အရာဝတ်ထုတစ်ခုဖြစ်သည်။ ဟုတ်ပါတယ်, ဒေတာကိုလက်ခံရရှိရန်ထုံးစံအတန်းအမည်ကိုလည်းသင်သတ်မှတ်နိုင်သည်။

2 ။ PHP 5 နှင့် PHP 7 အကြားလိုက်ဖက်တဲ့ကွဲပြားခြားနားမှု

ခြားနားချက် 1: ဆောက်လုပ်ရေး၏အချိန်ကိုက်

  • PHP 5 : အရာဝတ်ထုကိုချက်ချင်းပြုလုပ်ပြီးနောက် attribute ကိုသတ်မှတ်ပြီးနောက်တွင် ဆောက်လုပ်ရေး (__Construction) ကိုခေါ်သည်။

  • PHP 7 : အရာဝတ်ထုတစ်ခုကိုချက်ချင်း တုန့် ပြန်သောအခါ,

၎င်းသည်အရေးကြီးသောပြ problem နာတစ်ခုဖြစ်စေပြီးသင်၏ဆောက်လုပ်ရေးသည်အချို့သောနယ်ပယ်များအစပိုင်းတွင်မှီခိုနေပါက PHP 5 နှင့် PHP 7 တွင်လုံးဝကွဲပြားခြားနားစွာပြုမူနိုင်သည်။

နမူနာ

ရိုးရှင်းတဲ့အတန်းတစ်ခုရှိတယ်ဆိုပါစို့။

 <?php
class User {
    public $id;
    public $name;

    public function __construct() {
        echo "အဆိုပါဆောက်လုပ်ရေးကိုခေါ်သည်:id = {$this->id}, name = {$this->name}\n";
    }
}

$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->query('SELECT id, name FROM users LIMIT 1');
$user = $stmt->fetchObject('User');
?>
  • PHP 5 တွင် output သည် -

     အဆိုပါဆောက်လုပ်ရေးကိုခေါ်သည်:id = 1, name = John
    
  • PHP 7 တွင် output သည်ဖြစ်နိုင်သည်။

     အဆိုပါဆောက်လုပ်ရေးကိုခေါ်သည်:id = , name = 
    

ဘာဖြစ်လို့လဲဆိုတော့ PHP 7 က attribute attribute attachment မတိုင်မှီ constructor ကိုခေါ်သည်။

ခြားနားချက် 2: optional parameters တွေကိုအတွက်အပြောင်းအလဲများ

PHP 5 နှင့် 7 တွင် FetchObject နည်းလမ်း၏လက်မှတ်သည်အနည်းငယ်ကွဲပြားသည်။

 fetchObject ([ string $class_name = "stdClass" [, array $ctor_args = array() ]] ) : object
  • PHP 5 : $ class_name နှင့် $ ctor_orts ကို ထောက်ပံ့ပါ

  • PHP 7 - ဒေါ်လာ class_name နှင့် $ ctor_gargs များကိုလည်း ထောက်ပံ့သည်။ PHP 7.2 အပြီးတွင် Parameter type Verification သည်ပိုမိုတင်းကြပ်သည်

အကယ်. သင်သည် PHP 7 တွင် PHP 7 တွင်မအောင်မြင်ပါကဒုတိယ parameter အဖြစ်သင် type ရာရက် အမှားကိုတိုက်ရိုက်ဆက်သွယ်ပါလိမ့်မည်။

နမူနာ

 <?php
// အမှားသရုပ်ပြ(PHP 7.2+ အမှားတစ်ခုသတင်းပို့ပါလိမ့်မယ်)
$user = $stmt->fetchObject('User', 'မှားသောctor_args');
?>

ရေးရန်မှန်ကန်သောနည်းလမ်းမှာ -

 <?php
$user = $stmt->fetchObject('User', ['တေးရေး1', 'တေးရေး2']);
?>

ခြားနားချက် 3: အတန်းမတည်ရှိသည့်အခါအမှားကိုင်တွယ်ခြင်း

  • PHP 5 : သတ်မှတ်ထားသော $ class_name မတည်ရှိပါက Fetchobject သည် မှားသည်

  • PHP 7 : သတ်မှတ်ထားသော $ class_name မတည်ရှိပါက အမှား ခြွင်းချက်သည်တိုက်ရိုက်ပစ်ချလိမ့်မည်။

ဒီတော့ PHP 7 မှာ $ class_name ကို မှန်မှန်ကန်ကန် loaded လုပ်ရမယ်, ဒါမှမဟုတ်ဒီလိုမှမဟုတ်ရင်ကုဒ်ချိုးလိမ့်မယ်။

လုံခြုံသောချဉ်းကပ်မှုမှာ

 <?php
$className = 'User';
if (class_exists($className)) {
    $user = $stmt->fetchObject($className);
} else {
    throw new Exception("အမျိုးအစား {$className} မတည်ရှိပါဘူး");
}
?>

3 ။ ၎င်းကိုအသုံးပြုသောအခါသင်ဘာကိုဂရုပြုသင့်သနည်း။

  • အကယ်. သင်သည် Class Dailtors တွင်ဒေတာဘေ့စ်နေရာများရှိဒေတာဘေ့စ်ကွက်များပေါ်တွင်မှီခိုနေပါက PHP 7 ရှိ PHP 7 တွင် conferencor တွင်မသုံးသေးသောဂုဏ်သတ္တိများကိုအသုံးပြုခြင်းကိုရှောင်ရှားရန် PHP 7 တွင် Initialization Logic ကိုပြန်လည်ရှင်သန်ရန်သေချာပါစေ။

  • $ Ctor_orts_gargs သို့ရောက်သော array သည် Php 7.2 အပြီးအမျိုးအစားအမှားများကိုကာကွယ်ရန်အမြဲတမ်းခင်းကျင်းရန်အမြဲတမ်းဖြစ်သည်။

  • Fetchocboboject ကို ခေါ်ဆိုခြင်းမပြုမီ class_exists ကို အသုံးပြုပါ။

  • PHP 5 နှင့် PHP 7 နှင့်သဟဇာတဖြစ်ရန်လိုအပ်ပါကရိုးရှင်းသော stdclass ကို တစ်ပုံစံတည်းသုံးရန်နှင့်လိုအပ်သောအရာဝတ်ထုများကိုကိုယ်တိုင်ခွဲထားရန်အကြံပြုသည်။

4 ။ ကိုးကားစရာပစ္စည်းများ