Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MySQL表列上存储多个值并在查询中使用它们?_Php_Mysql_Arrays_Pdo - Fatal编程技术网

Php 在MySQL表列上存储多个值并在查询中使用它们?

Php 在MySQL表列上存储多个值并在查询中使用它们?,php,mysql,arrays,pdo,Php,Mysql,Arrays,Pdo,很抱歉这个难以理解的标题,但这里什么都没有: 在我的用户表中有两种用户,培训生和教练 培训生可以添加教练,而教练将看到培训生将在数据库上创建的内容 如果教练只能有1名学员,只需将学员的用户ID存储在名为iscoachof的列中,这将很简单。但是,多个用户必须能够添加coach,因此iscoachof可能包含比一个多得多的userID。比如34,72345,87,97 下面是我当前的代码,它将用新值更新列iscoachof $fd = $_POST['coach']; $user = $_SE

很抱歉这个难以理解的标题,但这里什么都没有:

在我的用户表中有两种用户,
培训生
教练

培训生
可以添加
教练
,而
教练
将看到
培训生
将在数据库上创建的内容

如果
教练
只能有1名
学员
,只需将
学员
的用户ID存储在名为
iscoachof
的列中,这将很简单。但是,多个用户必须能够添加coach,因此
iscoachof
可能包含比一个多得多的userID。比如
34,72345,87,97

下面是我当前的代码,它将用新值更新列
iscoachof

 $fd = $_POST['coach'];
 $user = $_SESSION['login']['id'];
 $query = "UPDATE users SET iscoachof='$user' WHERE id='$fd'";
 $add = $db->prepare($query);
 if($add->execute()){
   echo "Lisätty";
 }
 else{
 echo "Ei lisätty";
 } 
它只是覆盖当前值,而这不是一个选项

所以,我需要做一些类似的事情

$currentval =  "SELECT iscoachof FROM users WHERE id='$fd';
$do = $db->prepare($currentval);
$do->execute();
while($row = $do->fetchObject()){
$currentval = $row->iscoachof;
}
在更新之前获取当前值,但是我应该如何存储它,以便以后可以在
$data

$q = "SELECT * FROM diaries WHERE UserID='$data' AND date='$today'";
$do = $db->prepare($q);
$do->execute();

因此,基本上,是否可以将其存储在一个数组中,并在以后提取值时保存到数据库中?我建议您再次查看数据库设计。最好有一个不同的表来存储教练和学员之间的关系。这样,您可以在需要时从表中添加/删除

$fd = $_POST['coach'];
$user = $_SESSION['login']['id'];
$query = "INSERT into coaches SET coach='$fd', user=$user";
$add = $db->prepare($query);
if($add->execute()){
 echo "Lisätty";
}
else{
echo "Ei lisätty";
} 

但是要小心输入的POST变量,否则您将接受SQL注入。

我不知道您的数据库和体系结构,但如果不存储每个教练的学员列表,那么就不会更容易了。反过来为每个学员分配一个教练

如果没有,您可以存储逗号分隔的值,然后用PHP解析它

编辑:但正如其他人所说,没有必要做后一件事,因为您可以有一个方便的一对多关系,所以每个coach都有一个表,每个用户都有一个表,然后为每个用户分配一个coach,例如,这里:

创建另一个表,例如
coach\u to\u培训生

coach_id INTEGER
trainee_id INTEGER
两者都是主键


然后,您可以简单地添加一对新的coach\u id,因为它确实是一个错误的DB结构。教练和学员之间应该有一对多的关系。。。在这种情况下,我会添加一个关系表,为每个学员映射一张沙发。。。通过这种方式,您可以添加/更新/删除关系。我可能应该这样做,但问题仍然是一样的。我使用pdo,所以所有注入都由prepare.OMG来处理,真的吗?这就是你解决问题的方法?考虑一下你的建议——每个学员可以指派一名以上的教练-1这就是为什么我添加了“我不知道您的数据库”但是很难让一个学员有两个不同的教练来指导同一件事,如果你不得不说两种不同的运动,你可以为每一种运动安排一张桌子,这会给你很大的灵活性,但前提是你没有两个教练来指导同一件事。而且,一个学员有3-4个以上的教练是非常困难的我认为,一个人在同一时间拥有10名以上的教练是不可能的。我认为,总的来说,这是一个不好的举动,但既然我们谈论的是训练和人,我不明白为什么不使用这个事实啊,这就是我需要的!没有考虑到这一点,只是认为培训生/教练在一个表中只能存在一次。但是我应该如何分配两个主键呢?如果您使用phpmyadmin创建表,只需将值
primary
添加到设计表单的两列中即可。如果您只使用SQL,只需添加
PRIMARY(coach\u id,培训生\u id)
,就像您只对一个主列所做的那样……我使用的是sqlbuddy,它只给了我定义的
多个主键
您的DB是MySQL吗?不知道一个
sqlbuddy
但是如果它只是phpmyadmin的替代品,那么它不允许有多个主键列是有问题的。。。试着用我编辑过的答案中的简单SQL。。。
CREATE TABLE `coach_to_trainee` (
  `coach_id` INTEGER NOT NULL,
  `trainee_id` INTEGER NOT NULL,
  PRIMARY KEY (`coach_id`, `trainee_id`)
)