javascript - 数组输入在 SQL 中另存为静态字“数组”
问题描述
之前,我设法在数据库中保存了一个对象。现在,我需要将每个数据连续保存在一个数组中。我尝试使用 array_column 将一组特定的数据保存到列中,但它保存为单词“Array”。如果我将它们内爆,它们将回到被保存为对象的状态。我正在使用一个名为 thingEngineer 的内置准备好的语句。
前端
<template>
<q-card
class="exam-section"
style="width:auto"
v-for="(tdata, index) in testData"
:key="index"
>
<h5>{{ index + 1}}. {{ tdata.question }}</h5>
<q-input
filled
v-model="tdata.studentAnswer"
label="Enter Your Answer Here"
align="center"
/>
</q-card>
</template>
<script>
export default {
data() {
return {
option: [],
testData: [],
token: this.$store.state.token,
subData: this.$store.state.subData,
assignData: this.$store.state.assignData,
testItems: this.$store.state.testItems,
gotEm: false
};
},
methods: {
submitMyAnswer() {
console.log(this.testData);
this.$store
.dispatch("SAVE_STUDENT_ANSWER", {
token1: this.assignData.teacher,
token2: this.token,
testData: this.testData
// .testId,
// studentAnswer: this.testData.studentAnswer
})
.then(response => {
alert("Test Item Has Been Answered!");
console.log(response.data);
});
}
}
}
后端
if (isset($_GET['submitId']) && $_GET['submitId'] == 2) {
$testdata = file_get_contents('php://input');
$testdecodedData = json_decode($testdata);
$token1 = $testdecodedData->{'token1'};
$token2 = $testdecodedData->{'token2'};
$qna1 = $testdecodedData->{'testData'};
// $qna2 = $testdecodedData->{'question'}; This was on the frontend
// $qna3 = $testdecodedData->{'studentAnswer'}; This was on the frontend
$qna2 = (array) $qna1;
$qna3_val = array_column($qna2, 'question');
$qna4_val = array_column($qna2, 'studentAnswer');
$testAnswer = array(array(
'AccessId' => $token1,
// 'Question' => implode(", ", array_values($qna2)),
'StudentAccessId' => $token2,
// 'TestId' => implode(" || ", array_values($qna2_val)),
'Question' => $qna3_val,
'StudentAnswer' => $qna4_val
));
$keys = array("AccessId", "StudentAccessId", "Question", "StudentAnswer");
$insertTest = $db->insertMulti('answertable', $testAnswer, $keys);
if ($insertTest) {
echo json_encode($insertTest);
}
}
解决方案
array_column() 根据列名返回一个值数组。
$qna1 是否只有一个问题和答案,并且值是字符串?
如果是这样,你应该能够做到这一点,除非我误解了这个问题:
$qna3_val = $qna1->question;
$qna4_val = $qna1->studentAnswer;
否则作为一个数组:
$qna3_val = $qna2['question'];
$qna4_val = $qna2['studentAnswer'];
更新:我不记得您删除的关于数据结构细节的评论之一,但为了澄清,这是我的想法的一般想法:
$testAnswers = array();
foreach ($qna1 as $questionData) {
$testAnswers[] = array(
'AccessId' => $token1,
// 'Question' => implode(", ", array_values($qna2)),
'StudentAccessId' => $token2,
// 'TestId' => implode(" || ", array_values($qna2_val)),
'Question' => $questionData->question,
'StudentAnswer' => $questionData->studentAnswer
);
}
$keys = array("AccessId", "StudentAccessId", "Question", "StudentAnswer");
$insertTest = $db->insertMulti('answertable', $testAnswers, $keys);
推荐阅读
- mysql - mysql innodb按主键删除10000行,但没有使用索引
- excel - Copy Multiple Ranges using Union to a new workbook
- oauth - Handling callback from Identity Server
- c# - Tcp-Listener Doesnt Always Catch Connections
- python - Fast assignment to Cython memoryview
- git - Can I rollback "git checkout ."?
- sybase - How to use isql COLUMN Format option
- python - 如果存在基于另一个列值的行,Pandas 会删除一个列值
- matlab - unexpected behavior textscan matlab when skipping characters
- python-3.x - Gmail API How to retrieve body of an email