我有三个表:
用户:
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_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并在用户表中找到匹配的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) 值 ('$id', '$value') 以查看是否会插入所有成员名称确实如此。但我不需要 team_users 表中的用户名,我需要他们的 user_id。
我对 PHP 和 Mysql 很陌生,我读过很多论坛和类似的问题,但找不到答案。我几天来一直坚持这个问题,有人可以帮忙吗?非常感谢!
最佳答案
尝试将其添加为 foreach
中的第一行环形。
$value = trim($value);
这是因为,当您分解逗号分隔的字符串时,很可能会添加空格。
例如当我们写一个逗号分隔的字符串"Adam, Eve, William"
时,注意每个逗号后面的空格。所以当你用逗号爆炸时,数组将有 Adam
, <space>Eve
, <space>William
所以仅在您的查询中 Adam
自 Eve
开始工作和William
开头添加了一个空格。
修剪时,空格会被删除。希望这能解释。
关于php - 爆炸功能后无法将所有行插入mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41711999/