首页 > 解决方案 > 数组输入在 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);
            }
        }

标签: javascriptphpvue.js

解决方案


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);

推荐阅读