爆炸后的功能无法将所有行插入到mysql中

时间:2017-01-18 05:27:57

标签: php mysql

我有三张桌子:

用户:

user_id (int, auto increment, primary key)
username (varchar (100))
(the rest is not immportant)

团队:

team_id(int, auto increment, primary key)
teamname (varchar (100))
(the rest is not important)

team_users:

team_id int, 
user_id int,
primary key (team_id, user_id),
foreign key (team_id) references teams (team_id),
foreign key (user_id) references users (user_id)

我有一个表单,用户可以在其中创建一个团队,也可以添加成员名称,这些名称将是逗号分隔值。

我想要的是将团队详细信息插入团队表和成员名称,在使用explode并在users表中找到匹配的user_ids后,将其与最后创建的团队ID一起插入team_users。

到目前为止我所拥有的是:

<?php
session_start();
$conn = mysqli_connect('xxx', 'xxx', 'xxx', 'xxx');

if (!$conn) {
    die("connection failed: ".mysqli_connect_error());
}

$teamname = $_POST['teamname'];
$members = $_POST['members'];
$games = $_POST['games'];
$image = $_POST['image'];

$sql = mysqli_query($conn,"INSERT INTO teams (teamname, games, images, founded) VALUES ('$teamname', '$games', '$image', NOW())");
$id = mysqli_insert_id($conn);

if(!empty($id)) {
    $membernames = explode(',', $members);    
    foreach($membernames as $value) { 

        $sql = mysqli_query($conn,"insert into team_users (team_id, user_id)
        select teams.team_id, users.user_id
        from teams, users where users.username = '$value' and teams.team_id = '$id'");

    } 

    if(false === $sql) die(mysqli_error($conn));
}
?>

我的问题是,当我执行此操作时,它只会插入一个,第一个添加用户的id到team_users中,但是用户可以添加多个用户作为团队成员。我为什么做错了?

我在team_users表中创建了一个用户名列,然后删除了user_id并更改了查询(插入到team_users(team_id,username)值(&#39; $ id&#39;,&#39; $ value& #39;)看它是否会插入所有成员名称而且确实如此。但是我不需要在team_users表中使用他们的用户名,我需要他们的user_id。

我是PHP和Mysql的新手,我已经阅读了很多论坛和类似的问题,但无法找到答案。我几天都坚持这个,有人可以帮忙吗?谢谢你mucH!

1 个答案:

答案 0 :(得分:0)

尝试将其添加为foreach循环中的第一行。

$value = trim($value);

这是因为,当您爆炸逗号分隔的字符串时,很可能会向其添加空格。

例如当我们写一个逗号分隔的字符串"Adam, Eve, William"时,请注意每个逗号后面的空格。因此,当您使用逗号进行爆炸时,数组将包含Adam<space>Eve<space>William

因此,在您的查询中,Adam只有Eve才有效,而William在开头添加了空格。

修剪时,会移除空格。希望这能解释。