首页 > 解决方案 > setFetchMode PDO::FETCH_CLASS PDO::FETCH_PROPS_LATE 返回未定义

问题描述

我正在尝试使用:

$stmt>setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE,static::MODEL_CLASS);         
$customer = $stmt->fetch();`

将返回的数据绑定到与 static::MODEL_CLASS 关联的构造函数中。即使我只是输入实际的类名“客户”,我也会在这里得到错误。在代码有机会获取之前,它会出错。如果没有 setFetchMode,我会取回数据。数据库和模型以完全相同的顺序具有完全相同的属性。有谁知道是怎么回事???

错误:

(!)致命错误:未捕获的 ArgumentCountError:函数 Klant::__construct() 的参数太少,通过了 0,并且在 D:\Documents\Stack\Dropbox\Dropbox\Deltion\working\Hoofdstuk 6\datamapperdesignpattern.php 中预期正好 8 个第 14 行

class Klant {
public $ID;
public $voornaam;
public $achternaam;
public $adres;
public $postcode;
public $woonplaats;
public $email;
public $password;

public function __construct($ID, $voornaam, $achternaam, $adres, $postcode, $woonplaats, $email, $password) {
    $this->ID = $ID;
    $this->voornaam = $voornaam;
    $this->achternaam = $achternaam;
    $this->adres = $adres;
    $this->postcode = $postcode;
    $this->woonplaats = $woonplaats;
    $this->email = $email;
    $this->password = $password;
}
function read($ID)
{
    $stmt = $this->pdo->prepare("SELECT * FROM customer WHERE ID = ?");
    try {
        $stmt->bindParam(1, $ID);
        $stmt->execute();  
    } 
    catch(PDOException $e) {
        echo $e;
    }
    $stmt->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE,static::MODEL_CLASS);
    $customer = $stmt->fetch();
    return $customer;
}

^ 完整代码供参考。构造函数是正常的public function __construct()

重要的?注意:这个完全相同的代码和这个完全相同的数据库可以与其他人一起使用。我有一个全新的 Xampp 安装。PHP版本是7.2.11。

标签: phpmysqlpdo

解决方案


PDO 不会向您的构造函数发送参数。相反,您可以创建对象,然后用于PDO::FETCH_INTO保存到已经存在的对象中。

<?php
function read($ID)
{
    $stmt = $this->pdo->prepare("SELECT * FROM customer WHERE ID = ?");
    try {
        $stmt->bindParam(1, $ID);
        $stmt->execute();  
    } 
    catch(PDOException $e) {
        echo $e;
    }
    $customer = new Klant(...pass your desired arguments...);
    $stmt->setFetchMode(PDO::FETCH_INTO, $customer);
    $stmt->fetch();
    return $customer;
}

推荐阅读