这是我在MySQL数据库中的表:

CREATE TABLE admins (
id int NOT NULL AUTO_INCREMENT,
bez varchar(55) DEFAULT 'unknown',
type varchar(7) NOT NULL DEFAULT 'unknown',
exist char NOT NULL DEFAULT '0',
tm TIMESTAMP default CURRENT_TIMESTAMP;

PRIMARY KEY ('id')
);

我只想在将eXist设置为‘1’时更新我的时间戳. 当我更改任何专栏时就不会了.

这是我的更新声明:

<?php
    if ( isset($_GET["id"]) ) {
        $id = $_GET["id"];
    
        $sql = "UPDATE admins SET exist='1' WHERE id=$id";
        $con->query($sql);
    }
    
    header("location: /index.php");
    exit;
    ?>

我试着用不同的方法把它和tm结合起来,但没有奏效! 我试过这样的东西:

    if ( isset($_GET["id"]) ) {
        $id = $_GET["id"];

$tm = date('Y-m-d H:i:s');

        $sql = "UPDATE admins SET exist='0', tm=$tm WHERE id=$id";
}

AND元并不管用.

我在SQL中try 了ON UPDATE CURRENT_TIMESTAMP,但它对我不起作用.因为如果eXist是‘1’,我只想要新的tm.

我在SQL中try 了以下内容:

DELIMITER $$

CREATE TRIGGER trigger_name
    AFTER UPDATE
    ON admins FOR EACH ROW
BEGIN
  IF NEW.exists = 1 THEN 
    SET NEW.tm = NOW();
  END IF;
END$$    

DELIMITER ;

但我收到一条SQL错误消息:

ERROR 1362 (HY000): Updating of NEW row is not allowed in after trigger

所以我试着用之前而不是之后,但我根本没有改变tm.

你有什么主意吗? 我能做些什么来解决我的问题?

Goal: UPDATE tm when setting exist to '1'

不要告诉我我对SQL注入持开放态度! 谢谢你的帮忙!

推荐答案

看起来引爆器能帮你解决这个问题.

根据您的错误消息,如果我们将其设置为BEFORE UPDATE,允许它在AFTER UPDATE触发器不能更新新值的情况下更新新值,并删除几个语法错误,则触发器可能如下所示

DELIMITER $$
CREATE TRIGGER upd_date_if_exists_is_one
    BEFORE UPDATE ON admins FOR EACH ROW
    BEGIN
        IF NEW.`exist` = 1 AND old.`exist` <> 1 THEN 
            SET NEW.tm = NOW();
    END IF;
END$$    
DELIMITER ;

如果保留tm TIMESTAMP default CURRENT_TIMESTAMP;,则将在初始插入完成时设置tm列,但在完成任何后续更新时不会更新tm列.

Php相关问答推荐

打印SQL表内容时在DIV内添加断点

自定义WooCommerce查询字符串仅显示前3个产品

PHP-带POST验证的for循环

从AJAX响应中获取一个未定义的html

限制联系人页面仅允许在WooCommerce中登录的用户

防止同时从Laravel中的用户帐户中提取

Symfony框架锁定和.env设置

在WooCommerce中以编程方式添加特定产品后,将价格设置为零

显示自定义 Laravel 9 公共属性的错误

服务器升级到新的mysql版本8.0.34后查询错误

WooCommerce:如果购物车中已存在产品,则增加购物车商品数量

.htaccess 重写规则问题

在 WooCommerce 我的帐户自定义部分显示未购买的产品

添加或删除优惠券后自动刷新 WooCommerce checkout 表单字段

从图像URL中获取文件扩展名?

在PHP WordPress插件中使用变量连接路径时的问题解决方法

正则表达式请帮我从内容中找到这个词

遇到特定键时修改二维数组以创建嵌套数据集

服务器发送的事件:EventSource 抛出 MIME 错误

检测字符串是否包含Letter with Tilde或Letter + Combining Tilde