php - MySQL 触发器每次更新都会添加两行

标签 php mysql codeigniter activerecord triggers

我试图在每次更新“tickets”表后更新“ticketHistory”表。我设置了以下触发器,每当我的“门票”表更新时(通常在编辑字段时)就会运行:

 TRIGGER `ticket_edit` AFTER UPDATE ON `tickets` FOR EACH ROW INSERT INTO ticketHistory
    (ticketId, action, originator, assigned, date)
VALUES 
    (NEW.ticketId, "Edited", NEW.userId, NEW.assigned, NEW.lastUpdated);

每当我的应用程序中完成更新时,正在编辑的字段以及“lastUpdated”时间都会更新。我认为因为正在更新两个字段,所以它运行触发器两次,导致两个相同的行被插入到我的“ticketHistory”表中。我只想插入一行。

有没有办法限制它只插入一行?任何帮助是极大的赞赏!

编辑

所有数据库插入和更新都是使用 CodeIgniter 的 ActiveRecord 完成的。

我的模型:

public function editTicket($ticket)
{
    $q = $this->db->where('ticketId', $ticket['ticketId']);
    $q = $this->db->update('tickets', $ticket);

    $results = $this->db->affected_rows();
}

我的 Controller :

public function edit_ticket()
{
    $ticketId = $this->uri->segment(3);
    $description = str_replace("\n", "\r", $this->input->post('description'));

    $ticket = array(
        'ticketId'    => $ticketId,
        'headline'    => $this->input->post('headline'),
        'description' => $description,
        'priority'    => $this->input->post('priority'),
        'category'   => $this->input->post('category'),
        'lastUpdated' => date("Y-m-d H:i:s", time())
    );

    $this->tickets->editTicket($ticket);
}

最佳答案

public function editTicket($ticket)
{
    $q = $this->db->where('ticketId', $ticket['ticketId']);
    echo "I am here again<br/>";
    $q = $this->db->update('tickets', $ticket);

    $results = $this->db->affected_rows();
}

关于php - MySQL 触发器每次更新都会添加两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31526393/

相关文章:

php - 如何从多维数组mysql插入多行

database - codeigniter 图片上传mysql

php - 如何连接两个表以便我可以使用过滤器来查询两个表

php - 俄语、葡萄牙语等文本编码错误

php - 在 PHP 中将工作日设置为德语

mysql - 在 phpmyadmin 中添加触发器

codeigniter - 更改 url 以获得更好的 SEO

php - mod_rewrite : subdomain to controller

PHP 代码修改以仅检索要添加到 PDF 的第一张图像

php - JSON.解析 : unexpected end of data at line 1 column 1 of the JSON data( Angular2 backend php server SQL)