триггер (OLD,NEW)

craz

Нестандартное звание
триггер (OLD,NEW)

CREATE TRIGGER `some_trigger` BEFORE UPDATE ON some_table
FOR EACH ROW BEGIN
INSERT INTO log Set
actionName = 'update',
tableName = 'some_table',
fieldsId = OLD.id,
fieldsArrayOld = OLD,
fieldsArrayNew = NEW;
END;


fieldsArrayOld = OLD,
fieldsArrayNew = NEW;

как можно записать в эти поля строку всех колонок из some_table если структура не известна?

записываться должно чтото типа в таблицу log


fieldsArrayOld = "id_old;field_1_Old;...;field_n_Old;"
fieldsArrayNew = "id_old;field_1_New;...;field_n_New;"
 

Lakr

Новичок
если я правильно понял что требуется то вот почитайте
http://habrahabr.ru/blogs/mysql/37693/
если коротко
CREATE TRIGGER `update_test` AFTER INSERT ON `test`
FOR EACH ROW BEGIN
INSERT INTO log Set msg = 'insert', row_id = NEW.id;
END;
 

craz

Нестандартное звание
замечательно спасибо блин огромное я на гугле не забанен.

Короче задача изменилась знаю я названия колонок.


PHP:
$stOLD = $stNEW = ""; 
foreach ( $this->getColsList($this->getTableList(0)) as $column ) {   
          $stOLD .= "OLD.".$column."+";
             $stNEW .= "NEW.".$column."+"; 
}
$nameTrigger = "update_".$this->getTableList(0); 
$sql = "CREATE OR REPLACE TRIGGER 
`{$nameTrigger}` BEFORE UPDATE ON {$this->getTableList(0)}                 
FOR EACH ROW BEGIN                 
INSERT INTO versioningData Set                              
actionName = 'update',                             
tableName = '{$this->getTableList(0)}',                             
fieldsId = OLD.id,                             
fieldsArrayOld = {$stOLD},                             
fieldsArrayNew = {$stNEW};                 
END;";         
$this->_db->query($sql);
в базу он записываеться как строка

OLD.id;OLD.ctg_title;OLD.ctg_description; .... - понятное нужны значения, а не название OLD.field...

как это заикранировать чтоль чтобы mysql понял что от него требуеться вернуть значения, в строку. а не просто строку?
 

prolis

Новичок
так чему там равна $sql?
в коде разделитель + должен был получиться
PHP:
$stOLD .= "OLD.".$column."+";
а получается ";":
OLD.id;OLD.ctg_title;
надо использовать implode
PHP:
CONCAT(". implode(",", getTableList(0)).")"
 

craz

Нестандартное звание
короче с разделителями разными пробывал + это конечно не разделитель я думал может атк строку сложить короче эксперементировал
ув. Вурдалак у меня такое ощущение, что вообще тему не прочувствовал.
если честно пробывал много но немного не досидел прям до конктретного вопроса) щас искупаю мелкую скажу че хотел.
 

craz

Нестандартное звание
нормально все уже три раза помыли) тока батя если честно в отпуске))) пивко попивает о проблемах не думает.
 
Сверху