Php 创建新主记录时填充多个表

Php 创建新主记录时填充多个表,php,mysql,mysqli,Php,Mysql,Mysqli,我一直在开发我的第一个网络应用程序,我遇到了一些麻烦。我在数据库中设置了一个表,如下所示: 学生id(学生id、名、姓、日期等) 我还有几个类似于此设置的类的表 班级表格(id、学生id、测验1、测验2等) student\u id是我想要跟踪一切的方式,据我所知,这将是一个主键,将成为类表上的外键 我想做的是,当我正在编写的php脚本创建一个新学生时,在每个类表上为学生创建一个条目。我的查询是这样的: $query = "INSERT INTO student_id(0, '$first_na

我一直在开发我的第一个网络应用程序,我遇到了一些麻烦。我在数据库中设置了一个表,如下所示:

学生id(学生id、名、姓、日期等)

我还有几个类似于此设置的类的表

班级表格(id、学生id、测验1、测验2等)

student\u id
是我想要跟踪一切的方式,据我所知,这将是一个主键,将成为类表上的外键

我想做的是,当我正在编写的php脚本创建一个新学生时,在每个类表上为学生创建一个条目。我的查询是这样的:

$query = "INSERT INTO student_id(0, '$first_name', '$last_name'.... etc);".
         "INSERT INTO class_table(0, LAST_INSERT_ID(), '$quiz_1', $quiz_2'...etc)";

这样做对吗?我一直从我的
mysqli\u查询中得到一个错误…
,所以我猜这就是问题所在。如何实现这一点?

mysqli\u query()
(和
mysql\u query()
)将只执行一个查询。您需要执行两次调用
mysqli\u query()
或使用
mysqli\u multi\u query()
,这将在一次调用中执行多个查询。

您缺少
value
子句:

$query = "INSERT INTO student_id VALUES (0, '$first_name', '$last_name'.... etc);".
         "INSERT INTO class_table VALUES (0, LAST_INSERT_ID(), '$quiz_1', '$quiz_2'...etc)";
你需要使用这个函数。请参见下面的示例:

您还可以创建一个存储过程,并使用所有需要的参数调用它:

CALL insert_student('$first_name', '$last_name', '$quiz_1', $quiz_2', ... etc);
下面是一个例子:

CREATE PROCEDURE add_student(
    IN  v_first_name    VARCHAR(50),
    IN  v_last_name     VARCHAR(50),
    IN  v_quiz_1        VARCHAR(255),
    IN  v_quiz_2        VARCHAR(255)
)
DETERMINISTIC
MODIFIES SQL DATA
proc: BEGIN
    START TRANSACTION;

    INSERT INTO student_id VALUES (0, v_first_name, v_last_name);

    IF ROW_COUNT() <= 0 THEN
        ROLLBACK;
        SELECT 0 AS result;
        LEAVE proc;
    END IF;

    INSERT INTO class_table VALUES (0, LAST_INSERT_ID(), v_quiz_1, v_quiz_2);

    COMMIT;

    SELECT 1 AS result;
END;
CREATE PROCEDURE add\u student(
以v_的名字VARCHAR(50),
在v_姓VARCHAR(50)中,
在v_quick_1 VARCHAR(255)中,
在v_测验_2中VARCHAR(255)
)
确定性
修改SQL数据
程序:开始
启动交易;
插入学生id值(0,v_名字,v_姓氏);

我今晚就玩这个。这被认为是一种“良好”实践,还是有一种更好的方法来实现这一点?我可以在创建过程时使用call插入多个表,还是类似于mysqli_查询,仅限于在一个表上插入一个表?是的,我在答案中添加了一个示例。
CREATE PROCEDURE add_student(
    IN  v_first_name    VARCHAR(50),
    IN  v_last_name     VARCHAR(50),
    IN  v_quiz_1        VARCHAR(255),
    IN  v_quiz_2        VARCHAR(255)
)
DETERMINISTIC
MODIFIES SQL DATA
proc: BEGIN
    START TRANSACTION;

    INSERT INTO student_id VALUES (0, v_first_name, v_last_name);

    IF ROW_COUNT() <= 0 THEN
        ROLLBACK;
        SELECT 0 AS result;
        LEAVE proc;
    END IF;

    INSERT INTO class_table VALUES (0, LAST_INSERT_ID(), v_quiz_1, v_quiz_2);

    COMMIT;

    SELECT 1 AS result;
END;