Суть вот в чем: Есть класс, который используется с директивой PDO::FETCH_CLASS, В классе предопределено два приватных свойства и два метода, конструктор - который получает имя таблицы с которой работаем и дескриптор коннекта с базой и соответственно записывает их в свойства, и деструктор - который проверяет были ли изменены свойства и по результату либо записывает их обратно в базу либо просто уничтожает объект. Далее я создаю объект этого класса, PDO заполняет его свойствами вытянутыми из базы, выполняю над ним действия (меняю некоторые свойства) и уничтожаю объект, который должен перед смертью записать измененные данные методом, описанным вот тут. Т.е. объект, с которым работал засунуть обратно не переписывая его свойства в массив и т.д. Ну короче в стиле "тру" прогеров что-бы было лаконично и без лишних телодвижений и тут получаю исключение:
Код: Выделить всё
Invalid parameter number: number of bound variables does not match number of tokens'Ну неужели из-за того что свойств в объекте больше, чем именованных шаблонов в запросе он не может записать туда только те, которые определены? Как-то невериццо..
привожу утрированный код для наглядности:
Код: Выделить всё
class NSUnit {
private $db;
private $dbname;
function __construct($name,$db){
$this->db = $db;
$this->dbname = $name;
}
function __destruct(){
//короче тут другой код
echo 'Объект сдох!';
$sql = 'UPDATE `'.$this->dbname.'` SET var0=:var0, var1=:var1 WHERE id=:id';
$dbresult = $this->db->prepare($sql);
$dbresult->execute((array)$this);
}
}
$STH = $PDO->query("Select * FROM `Content` WHERE `id`='1';");
$STH->setFetchMode(PDO::FETCH_CLASS, 'NSUnit', array('Content',$PDO));
$STH=$STH->fetch();
$STH->content = 'true';
die();