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

  • Автор темы Автор темы craz
  • Дата начала Дата начала

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;"
 
если я правильно понял что требуется то вот почитайте
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;
 
замечательно спасибо блин огромное я на гугле не забанен.

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


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 понял что от него требуеться вернуть значения, в строку. а не просто строку?
 
так чему там равна $sql?
в коде разделитель + должен был получиться
PHP:
$stOLD .= "OLD.".$column."+";
а получается ";":
OLD.id;OLD.ctg_title;
надо использовать implode
PHP:
CONCAT(". implode(",", getTableList(0)).")"
 
короче с разделителями разными пробывал + это конечно не разделитель я думал может атк строку сложить короче эксперементировал
ув. Вурдалак у меня такое ощущение, что вообще тему не прочувствовал.
если честно пробывал много но немного не досидел прям до конктретного вопроса) щас искупаю мелкую скажу че хотел.
 
нормально все уже три раза помыли) тока батя если честно в отпуске))) пивко попивает о проблемах не думает.
 
Сверху