如何使用PHP / MySQL只允许一次更改列变量?

时间:2011-06-23 13:22:02

标签: php mysql database

我的MySQL数据库中有一张表,其中包含他们在注册时提交的每个用户的信息。

我现在想让用户更改其中一列(第X列),但只能更改一次。

最好的方法是什么?

我能想到的唯一方法是使用默认为0的二进制值向表中添加一个附加列(列Z),并在用户更新列X时更改为1。如果列Z为0,则站点允许更改,否则,它不允许更改。

有更好的方法吗?列Z应该与列X在同一个表中吗?我应该考虑的任何其他相关要点/问题?

感谢。

2 个答案:

答案 0 :(得分:3)

一旦将行插入表中,就可以创建列x的默认值。然后,当用户想要更新他的行时,db会检查此值,如果它自插入后没有更改,则可以允许用户更新。否则它会拒绝

CREATE TABLE example_table (
  id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  data VARCHAR(100),
  value_to_be_updated_once DEFAULT NULL
);
在代码中

,您可以检查列(value_to_be_updated_once)是否为空,然后应该允许用户编辑。

您必须确保用户未将此值设置为NULL,除非您希望拥有此值。 (也许用户改变了主意,稍后会进行编辑)

答案 1 :(得分:2)

您可能会在某个时候决定允许用户更改columnX 3次。布尔值不允许这样做。如果您决定允许用户更改columnY该怎么办?那么呢?

如果你绝对肯定你将永远不需要改变你的规则,二进制标志将正常工作。但是,如果您可能允许并限制具有可能不同限制的多个列的更改,则可以考虑使用User_Edits表。它可能看起来像这样:

tablename varchar(30) not null,
columnname varchar(30) not null,
user_id int unsigned not null,
changetime timestamp default current_timestamp,
oldvalue text

要了解用户完成了多少次修改:

SELECT COUNT(user_id) FROM User_Edits
WHERE tablename='Mytable' AND columnname='ColumnX';

而且,作为额外的奖励,您将拥有允许您撤消更改的审计跟踪。