将数组值插入数据库

时间:2013-10-03 07:26:21

标签: php mysql arrays

我有一个数组$playernames,它拥有不同的玩家名称。我试图提取值并将它们每次上传到数据库一次查询,如下:

for ($i=0; sizeof($playername) > $i; $i++)
{
    $name = $playername[$i];
    $query = mysql_query(
        "INSERT INTO `team`(`fixture_id`,`player_name`
    ) 
    VALUES ($id, '$name')") or die(mysql_error());  
}

然而现在发生的事情是在循环中的每个查询之后,数据在数据库的名称列中被覆盖。执行后,当我打开数据库时,只显示数组中包含的最后一个播放器的名称。

我做错了什么?提前致谢。 (对不起,如果这个问题涉及重复,但我没有看到关于上述问题的明确解释)

3 个答案:

答案 0 :(得分:3)

您没有为$id初始化/更改变量fixture_id的值。

因此,它采用默认值。

如果您的fixture_id设置为AUTO INCREMENT,请将您的查询修改为:

 $query = mysql_query("INSERT INTO `team`(`player_name`) 
    VALUES ('$name')") or die(mysql_error());  

fixture_id将自动增加值。

或者从数组$id设置$playername

另外,修改声明:

for ($i=0; sizeof($playername) > $i; $i++)

要:

$len = sizeof($playername);
for ($i=0; $len > $i; $i++)

当您调用PHP函数太多次(等于数组长度)时,这可能会影响性能。

通过这样做,我们使用变量$len而不是许多函数调用。

希望这适合你。

答案 1 :(得分:0)

变量fixture_id提供的SQL中的$id永远不会更改。因此,每个查询都会覆盖前一个查询的值。您可能还需要添加一些逻辑来在每次循环迭代中更改$id

答案 2 :(得分:0)

似乎$id值未设置或始终相同,您可能希望使用$i代替:

for ($i=0; sizeof($playername) > $i; $i++)
{
    $name = $playername[$i];
    $query = mysql_query("INSERT INTO `team`(`fixture_id`,`player_name`) 
    VALUES ($i, '$name')") or die(mysql_error());  
}

此外,您可以创建自动增量列,然后只需插入它:

foreach($playername as $name){

    $query = mysql_query("INSERT INTO `team`(`fixture_id`,`player_name`) 
            VALUES ('', '$name')") or die(mysql_error());
}

其中fixture_id在mysql中自动递增