我正在尝试通过PHP将一些数据插入关系数据库(使用InnoDB引擎的MySQL)和下面的表格和列。
主键ID都是自动增量。
这将允许我搜索特定的测验,然后获得属于该测验的问题以及(反过来)属于这些问题的多项选择可能答案。每个问题至少有两个可能的答案。
我正在创建一个允许用户创建新测验的界面。我已经看到了如何使用事务和LAST_INSERT_ID()来确保主键匹配的示例,但是当有多个依赖于前一个“父”的插入时,无法使其工作(可能的答案必须与正确的问题相关联)。
即。这个过程将是:
插入新测验
使用测验ID插入问题
使用问题ID插入该问题的所有可能答案
重复步骤2& 3直到输入所有问题和答案,然后提交交易
我试图在PHP中概述这一点。问题和答案通过POST作为字符串提供,以逗号分隔。我使用explode()将这些转换为数组,然后为数组中的每个值分配变量。我已经开始使用for循环,我认为原则上会解决问题,但不是答案。
$dbc = @mysqli_connect($host, $user, $password, $db) or die ('Could not connect to MySQL: ' . mysqli_connect_error());
$qN= ($_POST['quizName']);
$quizName = mysqli_real_escape_string($qN);
$qu = ($_POST['question']);
$question = mysqli_real_escape_string($qu);
$questionArray = explode(',', $question);
$numberQuestions = count($questionArray);
$i = 1;
foreach ($questionArray as $variable)
{
${'q_'.$i} = $variable;
++$i;
}
$an = ($_POST['answer']);
$answer = mysqli_real_escape_string($an);
$answerArray = explode(',', $answer);
$numberAnswers = count($answerArray);
$j = 1;
foreach ($answerArray as $variable)
{
${'a_'.$j} = $variable;
++$j;
}
//turn off AUTOCOMMIT, then run the required queries
$dbc->autocommit(FALSE);
$dbc->query("INSERT INTO Quiz(name)
VALUES
(".$quizName.")");
$quizID = $dbc->insert_id;
$n = 1;
for ($x=0; $x<$numberQuestions; $x++)
{
$dbc->query("INSERT INTO Question (quiz_id, question_name)
VALUES
(".$quizID.",".${'q_'.$n}.")");
$questionID = $dbc->insert_id;
echo $questionID;
++$n;
$m = 1;
for ($y=0; $y<$numberAnswers; $y++)
{
$dbc->query("INSERT INTO Answer(question_id, name)
VALUES
(".$questionID.",".${'a_'.$m}.")");
++$m;
}
}
// commit transaction
$dbc->commit();
// close connection
$dbc->close();
我非常感谢您提供的任何帮助 - 如果您需要更多信息或任何说明,请与我们联系。
答案 0 :(得分:3)
$dbc->query("INSERT INTO Question (quiz_id, question_name)
VALUES
(".$surveyID.",".${'q_'.$n}.")");
应改为:
$dbc->query("INSERT INTO Question (quiz_id, question_name)
VALUES
(".$quizID.",".${'q_'.$n}.")");
如前面的代码所示:
$quizID = $dbc->insert_id;
实际上,代码中的其他任何地方都找不到$surveyID
。