PDO с использованием вызова PDO :: FETCH_PROPS_LATE и __construct ()? - PullRequest
3 голосов
/ 03 февраля 2012

Я пытаюсь создать новый экземпляр объекта Setting, вызывающий __construct() метод с PHP PDO и ограничивающий PDO :: FETCH_PROPS_LATE . К сожалению, я получаю это предупреждение (и привязка не работает).

Как передать значения столбцов в метод конструктора?

Предупреждение: отсутствует аргумент 1 для Setting :: __ construct () в pdo.php.

Примечание: неопределенная переменная: введите pdo.php.

class Setting
{

    protected $key, $value, $displayable;

    public function __construct($key, $value = null, $displayable = 1)
    {
        $this->key         = $key;
        $this->value       = $value;
        $this->displayable = $displayable > 0;
    }

}

while($mashup = current($mashups))
{
    $stmt = $dbh->prepare('SELECT `key`, value, displayable
        FROM setting WHERE mashup_id = :id');

    $stmt->bindParam(':id', $mashup->id, PDO::PARAM_INT);
    $stmt->execute();

    $settings = $stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE,
       'Setting');
}

$stmt->closeCursor();

1 Ответ

9 голосов
/ 03 февраля 2012

В вашем конструкторе есть параметр по умолчанию $key:

public function __construct($key, $value = null, $displayable = 1)

Итак, когда вы делаете это:

$settings = $stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE,'Setting');

Ошибка: warning: Missing argument 1 for Setting::__construct() in pdo.php выбрасывается толькодля параметра $key, поскольку он не установлен по умолчанию.

Правильное использование fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE,... выглядит следующим образом:

$variable = $stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE,
                           'classname', 
                            <array of parameter names(in order) used in constructor>);

Итак, в вашем случае:

$variable = $stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE,
                            'Setting', 
                             array('key', 'value', 'displayable');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...