夜静清幽 2023-08-10 17:01 采纳率: 80%
浏览 4
已结题

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

设置了触发器 在插入大于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

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

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-10 18:27
    关注

    【以下回答由 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。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月21日
  • 已采纳回答 8月13日
  • 创建了问题 8月10日