Я пытаюсь создать новый экземпляр объекта Setting
вызывающего __construct()
с PHP PDO и ограничить PDO :: FETCH_PROPS_LATE . К несчастью, я получаю это предупреждение (и привязка не работает).
Как передать значения столбца методу конструктора?
Предупреждение: Отсутствует аргумент 1 для параметра :: __ 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();
У вашего конструктора есть необязательный параметр $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');