PHPMyAdmin 更新后触发器不起作用

标签 php mysql sql triggers sql-update

我正在使用 PHP MyAdmin 版本 4.1.12。

我正在尝试创建一个简单的触发器,在更新后,将表“person”中的“dateModified”设置为 CURRENT_TIMESTAMP。 dateModified 是 TIMESTAMP 类型。对人员进行更新的方式是通过网页上启用 X-Editable 的 GridView 在单个记录中设置单个属性。在使用更新的属性对模型执行验证后,将使用相关更新 SQL 创建并执行一个新的数据库命令。因此,每次更新仅修改“person”中的一行。

这是我编写的用于创建触发器的 SQL:

DELIMITER |
CREATE TRIGGER PERSON_AUPD AFTER UPDATE ON person
FOR EACH ROW BEGIN
SET @dateModified = CURRENT_TIMESTAMP ;
END;
|
DELIMITER ;

执行更新后,我发现触发器尚未触发,并且时间戳与创建时的时间戳保持不变(dateModified 和 dateCreated 的默认值都是 CURRENT_TIMESTAMP,因此它们在插入时自动设置) .

我四处寻找答案,甚至研究了获取更新的替代方法(替代方法是调用模型的 afterupdate 方法并在 dateModified 上执行单独的 SQL)。在将更多代码放入我的模型之前,我宁愿用尽一切使用触发器的机会。

任何帮助将不胜感激。

最佳答案

感谢@juergend,解决方案如下:

  • 将触发器类型设置为before update,因为after update无法更新属性,最好用于在相关审计表中插入新记录等。

  • NEW. 添加到您要修改的属性的前面。

关于PHPMyAdmin 更新后触发器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25220727/

相关文章:

javascript - ACF Gutenberg block 不在后端呈现光滑的 slider

php - 构建 PHP 应用程序,对设计模式感到困惑

php - Android, JSONObject 无法转换为 JSONArray

php - 如果 PDO 事务失败,如何重定向到一个页面?

SQLite - 帮助优化具有多个条件的先前行的总计

sql - 在计算查询中的行数时,我应该使用 count(*) 还是 count(a, b, c.., z)?

php - 无法导入wordpress数据库出现错误

php - Symfony:组织多客户端应用程序的业务逻辑

python - 2003, "Can' t 连接到 '192.168.1.xxx' (10060) 上的 MySQL 服务器

php - mysql 通过搜索关键字的每一位数字进行搜索查询