Php 在数据库中使用uniqid保存和更新

Php 在数据库中使用uniqid保存和更新,php,mysql,sql,mysqli,gamequery,Php,Mysql,Sql,Mysqli,Gamequery,我试图在数据库中插入具有唯一id的播放器。 这个模型适合我,但如果我给它一个密钥更新,它会在我的数据库中复制它 选择1 选择2 然后我试过了,但它根本没有插入任何东西 $id = uniqid(); $sql=mysqli_query($db, "SELECT * FROM players WHERE nickname='$player_nickname'"); if (mysqli_num_rows($sql) > 0) { $ins

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

选择1

选择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'");   
    }

        

您应该选中字段并使用:

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) 

请试用。

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

uniqueid生成一个字符串。当您的ID字段是数字时,它将不起作用。在这种情况下,该怎么办?如果您的唯一ID始终具有相同的长度,则将ID字段设置为varchar或具有固定长度的char。我忘记指定了,我在数据库中执行了此操作。id varchar 200,但仍然不起作用。此查询正确吗?mysqli_查询$db,插入玩家id、昵称、分数、在线时间、地图名、sid值“$id”、“玩家昵称”、“玩家分数”、“玩家时间”、“地图名”、“服务器id”,其中id=“$id”;在我看来,结尾的where contidion是错误的,我修改了,但它只插入了一个玩家。你需要使用批插入我将它添加到基本结构中,但什么也没有发生。插入到玩家id、昵称、分数、在线时间、地图名、sid值“$id”、“$player\U昵称”、“$player\U分数”、“$player\U时间”、“$mapname”,重复密钥上的“$server\u id”更新分数=分数+值存储,时间在线=时间在线+值在线重复的itid不应自动递增
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)