gpt4 book ai didi

php - 只有当我将 char 更改为 '1' 时,哪个 UPDATE 语句才能更改我的 TIMESTAMP? PHP, MySQL

转载 作者:行者123 更新时间:2023-12-05 02:26:53 25 4
gpt4 key购买 nike

这是我在 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 中尝试了 ON UPDATE CURRENT_TIMESTAMP 但它对我不起作用。因为如果存在是“1”,我只想要新的 tm。

我在 sql 中试过这个:

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

所以我尝试使用 BEFORE 而不是 AFTER 但我根本没有更改 tm。

你有什么想法吗?我该怎么做才能解决我的问题?

目标:当设置 exist 为“1”时更新 tm

不要告诉我我对 sql 注入(inject)持开放态度!感谢您的帮助!

最佳答案

看起来触发器会为您解决这个问题。

如果我们将其设为 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 默认 CURRENT_TIMESTAMP;,这样将在完成初始 INSERT 时设置 tm 列,但不会更新 tm 当任何后续更新完成时。

关于php - 只有当我将 char 更改为 '1' 时,哪个 UPDATE 语句才能更改我的 TIMESTAMP? PHP, MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73571924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com