MySQL - 在INSERT触发器上找不到CASE语句的案例

时间:2016-04-08 08:22:15

标签: php mysql

INSERT INTO `net`.`users` ( `email`, `username`, `password`, `verify`, `ip_address`) VALUES ('s', 'ss', 'ssss', 'ssssss', '127.0.0.1');

每当我在MySQL数据库上运行上述语句时,它都会返回错误:找不到CASE语句的案例

如果你很想看到PHP部分推动这个语句,这里是函数调用:

query("INSERT INTO `net`.`users` ( `email`, `username`, `password`, `verify`, `ip_address`) VALUES ('s', 'ss', 'ssss', 'ssssss', '127.0.0.1');");

这是查询功能:

function query($query) {
    global $con;
    $result = mysqli_query($con,$query);
    if (!$result) {
        printf("Error: %s\n", mysqli_error($con));
        die();
    }elseif ($result === true) {
        return true;
    }
    $row = mysqli_fetch_all($result,MYSQLI_ASSOC);
    if($row != null) {
        return $row;
    } else {
        return false;
    }
}

这是它写给的表:

CREATE TABLE `users` (
`id` int(8) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(45) DEFAULT NULL,
`username` varchar(45) DEFAULT NULL,
`password` varchar(60) DEFAULT NULL,


`lastlogin` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `joined` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `loggedin` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `sessionkey` varchar(60) DEFAULT NULL,
  `verify` varchar(16) DEFAULT NULL,
  `verified` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `banned` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `locked` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `ip_address` varchar(45) DEFAULT NULL,
  `failedattempts` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `unlocktime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=latin1;

以下是我在数据库上的触发器:

CREATE DEFINER=`root`@`localhost` TRIGGER `after_create_user` AFTER INSERT ON `users` 
FOR EACH ROW 
BEGIN
INSERT INTO user_records (action, userid, timestamp)
  VALUES ('CREATED', NEW.ID, NOW() );
END

CREATE DEFINER=`root`@`localhost` TRIGGER `after_update_user` AFTER UPDATE ON `users` FOR EACH ROW
BEGIN
    IF NEW.loggedin != OLD.loggedin OR NEW.sessionkey != OLD.sessionkey THEN
        IF NEW.loggedin = '1' THEN
            INSERT INTO user_records (userid, action, oldentry, newentry,  timestamp)
            VALUES (NEW.ID,'LOGGED_IN',OLD.sessionkey,NEW.sessionkey,NOW());
        ELSEIF NEW.loggedin = '0' THEN
            INSERT INTO user_records (userid, action, oldentry, newentry, timestamp)
            VALUES (NEW.ID,'LOGGED_OUT',OLD.sessionkey,NEW.sessionkey,NOW());
        ELSE
            INSERT INTO user_records (userid, action, oldentry, newentry, timestamp)
            VALUES (NEW.ID,'LOGGED_UNKNOWN',OLD.loggedin,NEW.loggedin,NOW());
        END IF;
    END IF;
    IF NEW.locked != OLD.locked OR NEW.unlocktime != OLD.unlocktime THEN
        IF NEW.locked = '1' THEN
            INSERT INTO user_records (userid, action, oldentry, newentry, timestamp)
            VALUES (NEW.ID,'LOCKED',OLD.unlocktime,NEW.unlocktime,NOW());
        ELSEIF NEW.locked = '0' THEN
            INSERT INTO user_records (userid, action, oldentry, newentry, timestamp)
            VALUES (NEW.ID,'UNLOCKED',OLD.unlocktime,NEW.unlocktime,NOW());
        ELSE
            INSERT INTO user_records (userid, action, oldentry, newentry, timestamp)
            VALUES (NEW.ID,'LOCK_UNKNOWN',OLD.locked,NEW.locked,NOW());
        END IF;
    END IF;
    IF NEW.ip_address != OLD.ip_address THEN
        INSERT INTO user_records (userid, action, oldentry, newentry, timestamp)
        VALUES (NEW.ID,'IP_CHANGE',OLD.ip_address,NEW.ip_address,NOW());
    END IF;
    IF NEW.verified != OLD.verified THEN
        IF NEW.verified = '1' THEN
            INSERT INTO user_records (userid, action, timestamp)
            VALUES (NEW.ID,'VERIFIED',NOW());
        ELSEIF NEW.verified = '0' THEN
            INSERT INTO user_records (userid, action, timestamp)
            VALUES (NEW.ID,'UNVERIFIED',NOW());
        ELSE
            INSERT INTO user_records (userid, action, oldentry, newentry, timestamp)
            VALUES (NEW.ID,'VERIFY_UNKNOWN',OLD.verified,NEW.verified,NOW());
        END IF;
    END IF;
    IF NEW.banned != OLD.banned THEN
        IF NEW.banned = '1' THEN
            INSERT INTO user_records (userid, action, timestamp)
            VALUES (NEW.ID,'BANNED',NOW());
        ELSEIF NEW.banned = '0' THEN
            INSERT INTO user_records (userid, action, timestamp)
            VALUES (NEW.ID,'UNBANNED',NOW());
        ELSE
            INSERT INTO user_records (userid, action, oldentry, newentry, timestamp)
            VALUES (NEW.ID,'BAN_UNKNOWN',OLD.banned,NEW.banned,NOW());
        END IF;
    END IF;

    IF NEW.password != OLD.password THEN
        INSERT INTO user_records (userid, action, oldentry, newentry, timestamp)
        VALUES (NEW.ID,'PASSWORD_CHANGE',OLD.password,NEW.password,NOW());
    END IF;

    IF NEW.email != OLD.email THEN
        INSERT INTO user_records (userid, action, oldentry, newentry, timestamp)
        VALUES (NEW.ID,'EMAIL_CHANGE',OLD.email,NEW.email,NOW());
    END IF;

    IF NEW.username != OLD.username THEN
        INSERT INTO user_records (userid, action, oldentry, newentry, timestamp)
        VALUES (NEW.ID,'USERNAME_CHANGE',OLD.username,NEW.username,NOW());
    END IF;
END

CREATE DEFINER=`root`@`localhost` TRIGGER `after_delete_user` AFTER DELETE ON `users` FOR EACH ROW BEGIN
INSERT INTO user_records (action, userid, timestamp)
  VALUES ('DELETED', OLD.ID, NOW() );
END

主要编辑:

这是它发生错误的主要代码(触发器)。有什么问题吗?

CREATE DEFINER=`root`@`localhost` TRIGGER `after_create_user` AFTER INSERT ON `users` 
    FOR EACH ROW 
    BEGIN
    INSERT INTO user_records (action, userid, timestamp)
      VALUES ('CREATED', NEW.ID, NOW() );
    END

user_records表:

CREATE TABLE `user_records` (
  `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
  `userid` mediumint(8) unsigned DEFAULT NULL,
  `action` varchar(60) DEFAULT NULL,
  `oldentry` varchar(128) DEFAULT NULL,
  `newentry` varchar(128) DEFAULT NULL,
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=latin1;

0 个答案:

没有答案
相关问题