setFetchMode PDO :: FETCH_CLASS PDO :: FETCH_PROPS_LATE вернуть неопределенный - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь использовать:

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

Чтобы связать данные, возвращающиеся в конструктор, который связан со static :: MODEL_CLASS. Даже если я просто наберу фактическое имя класса «Клиент», я получу ошибку здесь. Прежде чем код получит возможность получить его, он переходит в ошибку. Без setFetchMode я получаю данные обратно. База данных и модель имеют одинаковые свойства в одинаковом порядке. Кто-нибудь знает, что происходит ???

Ошибка:

(!) Неустранимая ошибка: Uncaught ArgumentCountError: слишком мало аргументов для функция Klant :: __ construct (), 0 пройдено и ровно 8 ожидается в D: \ Documents \ Stack \ Dropbox \ Dropbox \ Deltion \ работает \ Hoofdstuk 6 \ datamapperdesignpattern.php в строке 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.

1 Ответ

0 голосов
/ 15 ноября 2018

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...