我正在尝试创建 2 个可以将“默认”值添加到其他表的触发器。只有一个触发器 (addDefaultRole
) 一切正常,但是当我添加第二个触发器时,一切都坏了。
当新用户尝试在网站上注册时,一切都通过主“用户”表处理。这是来自 register.php
脚本
$sql = "INSERT INTO users (username, password) VALUES (?, ?)";
if($stmt = $conn->prepare($sql)) {
$stmt->bind_param("ss", $param_username, $param_password);
$param_username = $username;
$param_password = password_hash($password, PASSWORD_DEFAULT);
if($stmt->execute()) {
header("location: login.php");
} else {
echo "<script> window.onload = alert('Something went wrong! Try again.') </script>";
}
'users' 表现在有 2 个触发器:
addDefaultRole
CREATE TRIGGER `addDefaultRole` AFTER INSERT ON `users`
FOR EACH ROW BEGIN
INSERT INTO user_role (user_role.userID, user_role.roleID) VALUES (NEW.id, 1);
END
addDefaultIcon
CREATE TRIGGER `addDefaultIcon` AFTER INSERT ON `users`
FOR EACH ROW BEGIN
INSERT INTO user_icon (user_icon.userID, user_icon.iconID) VALUES (NEW.id, 1);
END
问题是当我尝试通过 SQL 执行 INSERT INTO users (username, password) VALUES (?, ?)
语句时,我收到提到的错误:Can't update table 'users' in stored function/trigger because it is already used by statement which invoked this stored function/trigger
并且我无法理解它,因为我找到的每个答案都在说明我使用 NEW
(我已经在使用)或将 AFTER INSERT
切换到 BEFORE INSERT
(我不能,因为我需要 NEW .id 用户注册时).
我该如何解决这个问题?