亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PDO::FETCH_CLASS,構造函數參數怎么寫?

PDO::FETCH_CLASS,構造函數參數怎么寫?

PHP
夢里花落0921 2022-01-02 17:29:18
我喜歡使用 PDO::FETCH_CLASS 來獲取對象數組,應該調用構造函數,因為我需要這個類中的構造函數。作為第三個參數,我使用了數據庫表中列的名稱。結果我得到了列的名稱,但不是數據庫中的預期值。我正在與 mariaDB 合作。如果沒有構造函數(只有 2 個參數),我會得到一個包含正確對象的數組。 $dbh = Db::connect();   $sql = 'SELECT * FROM dancer';   $stmt = $dbh->prepare($sql);   $stmt->execute();   // additional "|PDO::FETCH_PROPS_LATE" in 1. argument ignores    // the constructor   $dancers = $stmt->fetchAll(PDO::FETCH_CLASS   ,"Dancer"   ,array("firstName","lastName","id") );預期結果:  [0] => Dancer Object    (      [id:Dancer:private] => 7      [firstName:Dancer:private] => Carl      [lastName:Dancer:private] => Classen    )實際結果:  [0] => Dancer Object    (      [id:Dancer:private] => id      [firstName:Dancer:private] => firstName      [lastName:Dancer:private] => lastName    )PHP 類class Dancer{  private $id;  private $firstName;  private $lastName;    public function __construct($firstName, $lastName, $id = null)    {      if (isset($id)){        $this->id = $id;      }      $this->firstName = $firstName;      $this->lastName = $lastName;  }    #GETTER AND SETTER    public static function getAll()      {        try {          $dbh = Db::connect();          $sql = 'SELECT * FROM dancer';          $stmt = $dbh->prepare($sql);          $stmt->execute();          $dancers = $stmt->fetchAll(PDO::FETCH_CLASS            ,"Dancer"            ,array("firstName","lastName","id")          );        } catch (PDOException $e) {          print "Error!: " . $e->getMessage() . "<br/>";          die();        }        return $dancers;    }}
查看完整描述

1 回答

?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

我已經有很長一段時間沒有使用了,所以我FETCH_CLASS花了一段時間才記住它應該如何(?)掛在一起。我敲了一個測試:


class foo{


    private $username;

    private $userid;



    public function __construct( $arg1, $arg2 ){

        /* assign "ctor_args" as named properties */

        $this->username=$this->$arg1;

        $this->userid=$this->$arg2;


        /* do something with the newly created properties */

        $this->render( $arg1, $arg2 );

    }

    private function render( $arg1, $arg2 ){

        printf('

        <pre>

            username: %s

            userid: %s

        </pre>',

        $this->username,

        $this->userid

        );

    }

}



$ctor_args=array( 'name', 'uid' );



/* 

    use aliases to modify column names to 

    indicate the assignment within the class 

    later

*/

$sql='select `username` as `name`, `userid` as `uid` from users';

$stmt=$db->prepare( $sql );

$res=$stmt->execute();



/* fetch results - calling the `foo` class with additional `ctor_args` */

$stmt->fetchAll( PDO::FETCH_CLASS, 'foo', $ctor_args );

這個的輸出(表中只有 2 行)


username: RamRaider

userid: d6ba0682d75eb986237fb6b594f8a31f


username: Dustybin

userid: FHsdf44dfsdfcvhbfgh86237fb6b594f8a31f

因此,也許如果您將構造函數方法更改為


public function __construct($firstName, $lastName, $id = null){

    if( isset( $this->$id ) ){

        $this->id = $this->$id;

    }

    $this->firstName = $this->$firstName;

    $this->lastName = $this->$lastName;

}


查看完整回答
反對 回復 2022-01-02
  • 1 回答
  • 0 關注
  • 130 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號