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;