将值插入关系数据库

时间:2012-02-07 17:33:38

标签: php mysql transactions mysqli relational-database

我正在尝试通过PHP将一些数据插入关系数据库(使用InnoDB引擎的MySQL)和下面的表格和列。

  • 测验(身份证,姓名)
  • 问题(quiz_id,id,name)
  • 答案(question_id,id,name)

主键ID都是自动增量。

这将允许我搜索特定的测验,然后获得属于该测验的问题以及(反过来)属于这些问题的多项选择可能答案。每个问题至少有两个可能的答案。

我正在创建一个允许用户创建新测验的界面。我已经看到了如何使用事务和LAST_INSERT_ID()来确保主键匹配的示例,但是当有多个依赖于前一个“父”的插入时,无法使其工作(可能的答案必须与正确的问题相关联)。

即。这个过程将是:

  1. 插入新测验

  2. 使用测验ID插入问题

  3. 使用问题ID插入该问题的所有可能答案

  4. 重复步骤2& 3直到输入所有问题和答案,然后提交交易

  5. 我试图在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();
    

    我非常感谢您提供的任何帮助 - 如果您需要更多信息或任何说明,请与我们联系。

1 个答案:

答案 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