MYSQL表 - > T(播放器,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数组时,它会显示正确的值,以便查询无效。
应该在表'T'中添加11行,其中包含11个不同的播放器值和相同的id值。 但只有一个玩家值被添加到表中。为什么??
答案 0 :(得分:0)
update
语句用于更新数据而非插入数据。因此,通过更新,您只能更改表中已有的内容,不会创建任何新内容。
如果要插入新数据,则应使用insert
语句。
使用您发布的命令,您要对数据库说
嘿,man将属性player
更改为值'".$newPlayer[$k]."'
,其中id
表playear
为'".$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
作为由,
分隔的字符串,中间没有空格。
这样的事情:
$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