1

我一直在开发我的第一个 web 应用程序,但遇到了一些困难。我的数据库中有一个表,设置如下:

student_id(student_id, first_name, last_name, bdate, etc...)

我也有几个与此类似的类设置表

class_table(id、student_id、quiz_1、quiz_2 等....)

student_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_query...所以我猜这就是问题所在。我将如何实现这一目标?

4

2 回答 2

0

您缺少以下VALUES条款:

$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)";

您将需要使用该mysqli_multi_query()功能。请参阅http://www.php.net/manual/en/mysqli.multi-query.php#106126中的示例:

if ($mysqli->multi_query($query)) { 
    $i = 0; 
    do { 
        $i++; 
    } while ($mysqli->next_result()); 
} 
if ($mysqli->errno) { 
    echo "Batch execution prematurely ended on statement $i.\n"; 
    var_dump($statements[$i], $mysqli->error); 
}

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

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;
于 2012-10-16T03:27:30.427 回答
0

mysqli_query()(and mysql_query()) 只会执行一个查询。您需要执行两次调用mysqli_query()或使用mysqli_multi_query(),这将在一次调用中执行多个查询。

于 2012-10-16T01:01:35.453 回答