0

MYSQL 表 -> T(player,id)

我正在尝试为相同(只有一个)id 和 10 个不同的玩家更新这个 MYSQL 表。我这样做了。

for($k=0;$k<10;$k++)
    {       
       echo $newPlayer[$k];

       $que = "UPDATE `players` SET `player`='".$newPlayer[$k]."' WHERE `id`='".$id."'";
       $db_con->exec($que);
    }

当我回显 $newPlayer 数组时,它会显示正确的值,所以为什么查询不起作用。

应将 11 行添加到表“T”中,其中包含 11 个不同的玩家值和相同的 id 值。但只有一个玩家价值被添加到表中。为什么??

4

1 回答 1

0

update 语句用于更新数据而不是插入数据。因此,通过更新,您只能更改表上已有的内容,不会创建任何新内容。

如果要插入新数据,则应使用insert语句。

使用您发布的命令,您对数据库说

嘿,男人用表所在的player值更改属性'".$newPlayer[$k]."'idplayear'".$id."'"

因此,正如评论中所讨论的,这里对您来说是一个更好的解决方案:

update players p, 
  (select id, player, substring_index( substring_index(lst, ',', idx), ',', -1) as pl
     from (select p.*, @number := @number+1 as idx, lst 
             from players p,
                 (select @number := 0 as nb) n,
                 (select 'i,j,k,l,m,n,o,p' as lst) lst) x ) a 
set p.player = a.pl
where p.id = a.id 
  and p.player = a.player

但是对于 PHP,你必须将你的数组$newPlayer作为一个字符串,由 a 分隔,中间,没有空格。

像这样的东西:

$newNames = implode(",",$newPlayer);

 $que = "update players p, 
      (select id, player, substring_index( substring_index(lst, ',', idx), ',', -1) as pl
         from (select p.*, @number := @number+1 as idx, lst 
                 from players p,
                     (select @number := 0 as nb) n,
                     (select '$newNames' as lst) lst) x ) a 
    set p.player = a.pl
    where p.id = a.id 
      and p.player = a.player";

$db_con->exec($que);

有了这个,你就不需要for

于 2013-10-26T16:36:39.697 回答