php将多个值插入mysql表中的单独行

时间:2014-10-07 18:36:22

标签: php mysql forms pdo

我有一个PHP表单,其中包含各种类型的输入字段(复选框,下拉列表,收音机,自动完成等)。我想要做的是获取用户输入(可能是多个值,对于例如,问题:哪个是你最喜欢的电影?他可能会写一个以上的电影)并将这些值存储在Mysql表的不同行中。 这是我数据库中的表:

答案: ID,userId,questionId,answer

成员:userId,姓名,姓氏等

qustion:questionId,questionText

我能做的是这样的事情:(注意:在这种情况下,设计会有所不同,这里我为每个问题都有一个单独的字段)

$stmt = $conn->prepare('UPDATE test SET q1 = :q1, q2 = :q2, q3 = :q3, q4 = :q4, q5 = :q5, q6     = :q6, q7 = :q7 WHERE username = :username');
$stmt->execute(array(':q1' => $q1,':q2' => $q2, ':q3' => $q3, ':q4' => $q4, ':q5' => $q5, ':q    6' => $q6, ':q7' => $q7, ':username' => $_SESSION['SESS_USERNAME']));

我对这种方法的问题是多个值的答案被插入同一行,用逗号分隔它们(例如,如果用户写了" Tom cruise"和#34; Brad Pitt",它将这两个名称存储在同一行中)

我想我必须用这样的东西代替它:

$stmt = $conn->prepare('INSERT INTO Answer (qId, answer) VALUES (:qId, :answer)');

但在这里我不知道如何定义qId? (它如何识别每个答案与哪个问题有关)

编辑:

在下面的代码中,我可以从数据库中获取问题并将其存储在数组中,但我仍然不确定如何完成此代码..我应该在循环内写入insert语句(从DB获取问题的循环,所以对于每个问题,它插入qId并且用户已插入答案...我是对的??)

$arr = array(); 
$sql="select qId from question"; 
$result = mysql_query($sql) or die(mysql_error());
while( $row = mysql_fetch_assoc( $result ) ) {
   arr[] = $row[ 'qId' ]; 
} 

有人可以帮助我知道如何将这些值插入多行吗?

非常感谢,

2 个答案:

答案 0 :(得分:1)

问题的id可以是后端的数组。您可以迭代数组并循环插入问题。

另一种方法是使用variable variables在for循环中组合变量名。

对我来说,数组似乎更清晰。 :)

答案 1 :(得分:0)

如果您已经通过qId获得了存储在$ _POST中的答案,并且您在输入名称中使用了[],正如Aret建议的那样,您可以执行以下操作:

// creates an object, $stmt, which will do an insert whenever $stmt->execute()
// is called
$stmt = $conn->prepare('INSERT INTO Answer (qId, answer) VALUES (:qId, :answer)');

$sql="select qId from Answer"; 
$result = mysql_query($sql) or die(mysql_error());

// loop over all question ids
while( $row = mysql_fetch_assoc( $result ) ) {

  $qId = $row['qId'];

  // loop over all the answers for one question
  foreach ($_POST[$qId] as $answer) {

    // this runs the sql from the first line with :qId set to $qId, 
    // and :answer set to $answer
    $stmt->execute(array(':qId' => $qId, ':answer' => $answer));

  }

}