Php mysql触发器限制为id列插入的行数

Php mysql触发器限制为id列插入的行数,php,mysql,triggers,Php,Mysql,Triggers,我想我的网站的用户提交数据与我的HTML表单。但是,我希望每个用户总共提交5次。为了做到这一点,我使用MySQL DML触发器将我的列“um_id”限制为每个id只有五行。但是,我知道我的语法是错误的,我要求这里的任何人帮助更正它,以便它能够实际工作 现在我正在PHPMyAdmin中测试它,它最终将被放在我的PHP文件中。因此,um_id将有一个值,并与此SQL触发器连接 CREATE TRIGGER ml_trigger BEFORE INSERT ON ml_character; BEG

我想我的网站的用户提交数据与我的HTML表单。但是,我希望每个用户总共提交5次。为了做到这一点,我使用MySQL DML触发器将我的列“um_id”限制为每个id只有五行。但是,我知道我的语法是错误的,我要求这里的任何人帮助更正它,以便它能够实际工作

现在我正在PHPMyAdmin中测试它,它最终将被放在我的PHP文件中。因此,um_id将有一个值,并与此SQL触发器连接

CREATE TRIGGER ml_trigger 
BEFORE INSERT 
ON ml_character;
BEGIN
IF ( SELECT . 'um_id' . COUNT(*) > 5 ) THEN ROLLBACK;
END IF;
大概是这样的:

DELIMITER $$

CREATE TRIGGER ml_trigger_bi 
BEFORE INSERT
ON ml_character
FOR EACH ROW
BEGIN
   -- get count of existing rows with same um_id
   DECLARE li_cnt BIGINT;
   SELECT COUNT(*) AS cnt
     FROM ml_character t
    WHERE t.um_id = NEW.um_id
     INTO li_cnt ;
   -- if already five rows, throw error
   IF li_cnt >= 5 THEN
      SIGNAL '45000' SET MESSAGE_TEXT = 'Already five rows in ml_character';
   END IF;
END$$

DELIMITER ;

要检查的
um_id
的值将来自插入的行;我们将该值引用为
NEW.um_id

使用
having
不确定您要查询什么,但类似于
选择count(*)作为其中um_id=?拥有计数<5
是,这完全符合我的要求!你太棒了!它不断抛出一个语法错误#1064,但有一次我在发出信号后立即添加了SQLSTATE,它实际工作了。DOH!我在SIGNAL语句中遗漏了SQLSTATE关键字。我的错。