以下に、質問と回答を挿入するphpコードがあります。
<?php
var_dump($_POST);
// Prepare your statements ahead of time
$questionsql = 'INSERT INTO Question (SessionId, QuestionId, QuestionContent) VALUES (?, ?, ?)';
if (!$insert = $mysqli->prepare($questionsql)) {
// Handle errors with prepare operation here
echo __LINE__ . ': ' . $mysqli->error;
}
$answersql = 'INSERT INTO Answer (SessionId, QuestionId, Answer) VALUES (?, ?, ?)';
if (!$insertanswer = $mysqli->prepare($answersql)) {
// Handle errors with prepare operation here
echo __LINE__ . ': ' . $mysqli->error;
}
//make sure both prepared statements succeeded before proceeding
if ($insert && $insertanswer) {
$sessid = $_SESSION['id'] . ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : '');
$c = count($_POST['numQuestion']);
for ($i = 0; $i < $c; $i++) {
switch ($_POST['gridValues'][$i]) {
case '3':
$selected_option = 'A-C';
break;
case '4':
$selected_option = 'A-D';
break;
case '5':
$selected_option = 'A-E';
break;
default:
$selected_option = '';
break;
}
$results = $_POST['value'];
foreach ($results as $id => $value) {
$answer = $value;
$insert->bind_param('sis', $sessid, $id, $_POST['questionText'][$i]);
$insert->execute();
if ($insert->errno) {
// Handle query error here
echo __LINE__ . ': ' . $insert->error;
break 2;
}
$lastID = $insert->insert_id;
foreach ($value as $answer) {
$insertanswer->bind_param('sis', $sessid, $lastID, $answer);
$insertanswer->execute();
if ($insertanswer->errno) {
// Handle query error here
echo __LINE__ . ': ' . $insertanswer->error;
break 3;
}
}
}
}
//close your statements at the end
$insertanswer->close();
$insert->close();
}
問題はそれが私にこのエラーを与えているけれどもです:
警告:mysqli_stmt :: execute():( 23000/1062):92行目の/.../のキー「PRIMARY」のエントリ「RXT-1」が重複しています97:キー「PRIMARY」のエントリ「RXT-1」が重複しています
これで、「SessionId」と「QuestionId」の複合キーができましたが、以下がテーブルに表示されているため、問題はこれではないと思います。
質問表:
SessionId(PK) QuestionId(PK) QuestionContent
RZC 1 What is 2+2 and 3+3?
RZC 2 What is 2+2 and 3+3?
私が信じている問題は、質問1の同じ質問が両方のテーブル行に表示されていることです。質問2は別の質問にする必要があります(5+5と6+6とは何ですか?)
だから私の質問は、なぜそれが両方の行に同じ質問を表示するのか、そしてそれを修正するためにコードを変更するにはどうすればよいのかということです。
以下は、var_dump($ _ POST)が表示しているものです。この問題に関連するものは["numQuestion"] and ["questionText"]
です。
array(8) {
["numberAnswer"]=> array(2) {
[0]=> string(1) "2"
[1]=> string(1) "3"
}
["numQuestion"]=> array(2) {
[0]=> string(1) "1"
[1]=> string(1) "2"
}
["questionText"]=> array(2) {
[0]=> string(20) "What is 2+2 and 3+3?"
[1]=> string(41) "Which three items will you find in a car?"
}
["gridValues"]=> array(2) {
[0]=> string(1) "4"
[1]=> string(2) "10"
}
["reply"]=> array(2) {
[0]=> string(8) "multiple"
[1]=> string(8) "multiple"
}
["textWeight"]=> array(2) {
[0]=> string(1) "5"
[1]=> string(1) "5"
}
["submitDetails"]=> string(14) "Submit Details"
["value"]=> array(2) {
[1]=> array(2) {
[0]=> string(1) "A"
[1]=> string(1) "C"
}
[2]=> array(3) {
[0]=> string(1) "A"
[1]=> string(1) "B"
[2]=> string(1) "D"
}
}
}