Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 填充连接表_Php_Mysql_Sql_Forms_Post - Fatal编程技术网

Php 填充连接表

Php 填充连接表,php,mysql,sql,forms,post,Php,Mysql,Sql,Forms,Post,我正在开发一个排课系统,学生可以用php和mysql与老师一起预定课程 有3个单独的表来保存数据,每个表都有自己独特的ID studentID、lessonID和teacherID。它们都是多对多关系。很多学生可以上很多课。很多老师可以上很多课。因此,有两个连接表将学生和教师连接到相同的课程,课程/学生和课程/教师 我遇到的问题是,我正在制作一个表格来输入新课程。我希望能够以相同的形式分配学生和教师。表单中的大多数数据直接发布到课程表,这很容易(开始时间、结束时间、房间号等),但我在连接表中遇到

我正在开发一个排课系统,学生可以用php和mysql与老师一起预定课程

有3个单独的表来保存数据,每个表都有自己独特的ID studentID、lessonID和teacherID。它们都是多对多关系。很多学生可以上很多课。很多老师可以上很多课。因此,有两个连接表将学生和教师连接到相同的课程,课程/学生和课程/教师

我遇到的问题是,我正在制作一个表格来输入新课程。我希望能够以相同的形式分配学生和教师。表单中的大多数数据直接发布到课程表,这很容易(开始时间、结束时间、房间号等),但我在连接表中遇到了麻烦

我正在提取可用学生和教师的列表,并打算根据他们的ID将他们输入到连接表中。在实际创建课程ID之前,我似乎不知道该如何捕获它,因为我需要连接表的lessonID,但课程还没有创建

所有ID自动递增。我能想到的唯一解决方案是返回最新的lessonID并按1递增。这是最佳实践吗?我觉得这以后可能会引起问题。例如,当两个用户试图同时创建课程时,或者存在延迟,并且在另一个课程之前创建了另一个课程,但他们都将相同的课程ID发布到连接表中


欢迎您的任何意见!谢谢

当您插入课程记录时,您可以检索分配给它的ID(因为您已经自动递增了它)。因此,程序应该是首先插入课程,返回插入的ID。将此返回的课程ID与学生ID和教师ID一起使用,以插入连接记录

// $db is the mysqli object that has been connected to your database

// Insert the lesson
if ($db->query("INSERT INTO .........."))
{
    $lessonID = $db->insert_id;

    // Insert the student and teacher junctions with $lessonID
}
正如你所说

For example in situations when two users try to create lessons at the same time

如果发生这种情况,它不会产生任何问题,因此不要担心它

您不必担心课程不存在,因为您正在以相同的形式发布所有内容。插入数据时,只需控制逻辑即可。因此,您需要提交课程数据、教师列表和学生列表。在您的代码中,您必须首先插入课程(当然要控制可能发生的任何错误),并且可以使用课程ID插入教师和学生。如前所述,在插入之前的答案中,您可以获得插入的id。

对不起,我的php不是很好。。。我得到了逻辑,并且我能够检索lessonID,前提是我先插入了课程,但我不确定如何从数据库检索数字以将其分配给$lessonID。我不太明白“->”。什么是插入id?当您执行查询时,您的课程记录将以自动递增的id插入。生成的id将被放入
insert\u id
。在PHP中使用
->
操作符从类的实例访问成员/字段/变量。在本例中,
$db
是类
mysqli
的一个实例。通过执行
$lessonID=$db->insert\u id您正在检索插入到数据库中的最后一条记录的ID,在您的情况下,该ID将是可以用于更新连接表的课程ID。我明白了。所有这些都是用PHP预定义的?我不必设置或分配insert\u id?当您使用PHP中的
mysqli
类时,
insert\u id
会在您执行insert查询时自动设置,因此您只需为您的课程执行insert查询,分配的id将在
insert\u id