无法更新存储函数/触发器中的表“用户”,因为它已被调用此存储函数/触发器的语句使用

时间:2021-07-14 11:16:40

标签: mysql

我正在尝试创建 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 用户注册时).

我该如何解决这个问题?

0 个答案:

没有答案
相关问题