我有疑问:
"INSERT INTO mappings (id, service, created_at)
VALUES(%s,%s)" % (id, service)
这里我想在created_at列值下插入有关登录用户的信息。
不想使用日期和时间。 有人可以帮我这个吗?
答案 0 :(得分:0)
我使用以下函数获取用户名。
DROP FUNCTION IF EXISTS `GETUSERNAME`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `GETUSERNAME`() RETURNS char(16) CHARSET utf8
BEGIN
RETURN (SELECT
SUBSTRING_INDEX(USER(), '@', 1));
END
;;
DELIMITER ;
此函数解析USER()结果并将用户名与用户主机分开。如果您想获得主持人,请使用SUBSTRING_INDEX(USER(), '@', -1)
。然后插入一条记录
INSERT INTO `mappings` (`id`, `service`, `created_at`)
VALUES(:param1, :param2, GETUSERNAME());
或代码的副本:
"INSERT INTO mappings (id, service, created_at)
VALUES(%s,%s,GETUSERNAME())" % (id, service)
您也可以在插入前触发器中执行此操作。那将是
DELIMITER ;;
CREATE TRIGGER `trbinsertmappings` BEFORE INSERT ON `mappings`
FOR EACH ROW BEGIN
SET NEW.created_at=GETUSERNAME();
END
;;
DELIMITER ;
如果你需要一个id,那么我使用相似的功能:
DROP FUNCTION IF EXISTS `GETUSERID`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `GETUSERID`() RETURNS int(10)
BEGIN
DECLARE id_no INT DEFAULT -1;
select `id`
INTO id_no
FROM `tstaff`
WHERE `tstaff`.`user_name`=(SELECT SUBSTRING_INDEX(USER(), '@', 1))
LIMIT 1;
RETURN id_no;
END
;;
DELIMITER ;