为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号