我有一个名为“产品”的表,以下列是可以在该表中找到的示例(尽管还有更多):
- products_id
- 价格
- 我们的成本
当 price/our_cost 更新时,我想在 products_history 表中插入一行,内容如下:
- products_id 正在更改
- 正在更改的字段
- 旧值
- 新价值
- 进行更改的员工的员工 ID(在 PHP 中作为变量 $login_id 提供给我)
这是我当前的触发器,虽然我希望它可以工作(除了输入employee_id),但我收到一条错误消息Column count doesn't match value at row 1
DELIMITER |
CREATE TRIGGER after_update_products
AFTER UPDATE ON products FOR EACH ROW
BEGIN
SET @History = '';
IF NEW.price <> OLD.price THEN
SET @History = CONCAT(@History, '(', OLD.products_id, ", price, ", OLD.price, ", ", NEW.price, "),");
END IF;
IF NEW.our_cost <> OLD.our_cost THEN
SET @History = CONCAT(@History, '(', OLD.products_id, ", our_cost, ", OLD.our_cost, ", ", NEW.our_cost, "),");
END IF;
IF @History <> '' THEN
SET @History = SUBSTRING(@History, 2, CHAR_LENGTH(@History) - 3);
INSERT INTO products_history (products_id, field, old_value, new_value) VALUES (@History);
END IF;
END;
|
DELIMITER ;
我究竟做错了什么?
最重要的是,我是否需要担心在我插入的东西周围加上引号(当我这样做时,上面的错误仍然存在),并且转义会成为一个问题吗?
另外,如何让 PHP 将 $login_id 添加到更新的每一行?