【问题标题】:Save and update with uniqid in database在数据库中使用 uniqid 保存和更新
【发布时间】:2020-07-20 09:17:41
【问题描述】:

我尝试在数据库中插入具有唯一 ID 的播放器。 这个模型对我有用,但如果我给它一个密钥更新,它会在我的数据库中复制它。

选项 1

$id = uniqid();  
$insert_player_query    = mysqli_query($db,"INSERT INTO players (id,nickname,score,time_online,mapname,sid) VALUES ('$id','$player_nickname','$player_score','$player_time','$mapname','$server_id') ON DUPLICATE KEY UPDATE score = score + VALUES(score), time_online = time_online + VALUES(time_online) WHERE id='$id'");

选项 2

然后我尝试了,但它根本没有插入任何东西

$id = uniqid();  
$sql=mysqli_query($db, "SELECT * FROM players WHERE nickname='$player_nickname'");

if (mysqli_num_rows($sql) > 0) 
    {
         $insert_player_query2  = mysqli_query($db,"UPDATE players (nickname,score,time_online,mapname,sid) VALUES ($player_nickname','$player_score','$player_time','$mapname','$server_id') WHERE id='$id'");   
                
    } else {
         $insert_player_query   = mysqli_query($db,"INSERT INTO players (id,nickname,score,time_online,mapname,sid) VALUES ('$id','$player_nickname','$player_score','$player_time','$mapname','$server_id') WHERE id='$id'");   
    }

        

【问题讨论】:

  • uniqueid() 生成一个字符串。当您的 ID 字段为数字时,它将不起作用。
  • 在这种情况下该怎么办?
  • 如果您的唯一 ID 始终具有相同的长度,则将 ID 字段设为具有固定长度的 varchar 或 char。
  • 我忘了指定,我在数据库中做了这个。 id varchar (200) 但是还是不行。
  • 这个查询正确吗? "mysqli_query($db,"INSERT INTO 玩家 (id,nickname,score,time_online,mapname,sid) VALUES ('$id','$player_nickname','$player_score','$player_time','$mapname', '$server_id') WHERE id='$id'");"在我看来,从最后开始的位置是错误的

标签: php mysql sql mysqli gamequery


【解决方案1】:

删除“where”条件。在“INSERT”语句中没有任何意义。

【讨论】:

【解决方案2】:

您应该检查字段并使用:

CREATE TABLE `players` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `nickname` varchar(100) DEFAULT NULL,
  `score` int(11) DEFAULT NULL,
  `time_online` varchar(100) DEFAULT NULL,
  `mapname` varchar(100) DEFAULT NULL,
  `sid` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;


INSERT INTO players (id,nickname,score,time_online,mapname,sid) VALUES ('1','player_nickname','1','1','mapname','1') 
ON DUPLICATE KEY UPDATE score = score + VALUES(score), time_online = time_online + VALUES(time_online) 

请试一试。

【讨论】:

  • 我将它添加到基础结构中,但没有任何反应。
  • INSERT INTO player (id,nickname,score,time_online,mapname,sid) VALUES ('$id','$player_nickname','$player_score','$player_time','$mapname' ,'$server_id') ON DUPLICATE KEY UPDATE score = score + VALUES(score), time_online = time_online + VALUES(time_online)
  • 他复制了它
  • id 不应该是自增的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
相关资源
最近更新 更多