触发器限制了不能插入但是网页程序还是可以插入

设置了触发器 在插入大于100的ID时就会提示爆满
触发器语句
CREATE TRIGGER newuser BEFORE INSERT ON tk_user
FOR EACH ROW BEGIN
IF DATE(new.ID) > 100 THEN
THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "已爆满";
END IF;
END;

在Navicat中新增数据正常提示爆满

img

但是在PHP网页中也是insert 但是却还是正常插入

img


代码:

img

这是什么原因呢,该怎么解决。

【以下回答由 GPT 生成】

这个问题的原因是,Navicat是直接通过MySQL客户端连接数据库进行操作的,而PHP网页程序是通过网页服务器(如Apache)与数据库进行交互的。在PHP网页中执行插入操作时,触发器的限制可能没有被执行。

解决这个问题的方法有两种:

  1. 在PHP代码中手动检查插入的ID,如果大于100则不执行插入操作,可以使用以下代码示例:
<?php
// 获取待插入的ID
$id = 101; // 演示用,实际情况应根据实际需求获取ID

// 判断是否满足插入条件
if ($id > 100) {
    echo "已爆满,无法插入数据";
} else {
    // 执行插入操作
    // ...
    echo "插入数据成功";
}
?>
  1. 修改触发器的逻辑,将条件由大于100改为大于等于100,这样即使插入的ID为100,触发器也会限制插入。修改后的触发器语句如下:
CREATE TRIGGER newuser BEFORE INSERT ON tk_user
FOR EACH ROW BEGIN
    IF DATE(new.ID) >= 100 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '已爆满';
    END IF;
END;

通过这两种方法的任意一种,都可以在PHP网页程序中限制插入大于100的ID。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^