0

这似乎是我想要实现的基本目标,但我无法理解它。

我在我的数据库中存储我的用户的库存,就像这样;

id, userid, item, status

id: identifier of row
userid: unique identifier of user
item: unique identifier of item
status: 0 or 1, where 0 means no longer in the inventory and 1 active

现在,当用户在我的网站上出售该商品时,例如发送垃圾邮件请求时,会发生该商品多次出售的情况,因为该行尚未更新,并且在连续的请求中也获得了批准。

这是我的代码的简短易读示例;

function sell(uid, item){
  database.query('SELECT * FROM inventories WHERE user = ' + uid + ', item = ' + item).then((row) => {
    var item = row[0];

    //Check if the item is still in the user is inventory
    if(item.status !== 1){
      console.log('Found item is no longer in the user his inventory, item cannot be sold.');
      return;
    }

    //Remove the item form the inventory
    database.query('UPDATE inventories SET status = 0 WHERE item = ' + item);
  }).catch((err) => { console.log(err); })
}

我想要它,所以在执行此代码时不能再写入该项目的行,这样没有人可以两次出售一个项目,我认为这是一件常见的事情,尽管我不太确定如何达到这个结果。

4

0 回答 0