dongpai2754 2013-07-16 18:41
浏览 35
已采纳

使用php从mySQL数据创建实例

How do I propagate variables of an instance of an object from mySQL data using php? Here is my object in pseudo code:

exam:{
         questions:[
             question:{
                 questionID: string
                 questionTest: string
                 categoryID: string
                 correctAnswerID: string
                 chosenAnswerID: string
                 answers:[
                     answer:{
                         answerID = string
                         answerText = string
                         isTrue = bool
                     }
                     answer:{}
                 ]
             }
             question:{}
         ]
         categoryID: string
     } 

Here are the corespondant clases (there is a big chance that the syntax is wrong, I am new to php):

class ExamClass
{
    // property declaration
    public $questions = 'a default value';
    public $categoryID = 'a default value';
}

class QuestionClass
{
    // property declaration
    public $questionID = 'a default value';
    public $questionTest = 'a default value';
    public $categoryID = 'a default value';
    public $correctAnswerID = 'a default value';
    public $chosenAnswerID = 'a default value';
    public $answers = 'a default value';
}

class AnswersClass
{
    // property declaration
    public $answerID = 'a default value';
    public $answerText = 'a default value';
    public $isTrue = 'a default value';
}

And here is the php code that extracts the data from the data base:

<html>
<body>

<?php
    /*

     exam:{
         questions:[
             question:{
                 questionID: string
                 questionTest: string
                 categoryID: string
                 correctAnswerID: string
                 chosenAnswerID: string
                 answers:[
                     answer:{
                         answerID = string
                         answerText = string
                         isTrue = bool
                     }
                     answer:{}
                 ]
             }
             question:{}
         ]
         categoryID: string
     }

     */

    class ExamClass
    {
        // property declaration
        public $questions = 'a default value';
        public $categoryID = 'a default value';
    }

    class QuestionClass
    {
        // property declaration
        public $questionID = 'a default value';
        public $questionTest = 'a default value';
        public $categoryID = 'a default value';
        public $correctAnswerID = 'a default value';
        public $chosenAnswerID = 'a default value';
        public $answers = 'a default value';
    }

    class AnswersClass
    {
        // property declaration
        public $answerID = 'a default value';
        public $answerText = 'a default value';
        public $isTrue = 'a default value';
    }


    header('Content-Type: text/html; charset=utf-8');
    $con=mysqli_connect("localhost","root","root","Theory");
    // Check connection
    if (mysqli_connect_errno())
    {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    $result = mysqli_query($con,"SELECT `questions`.`questionID` AS questionID,
                           `questions`.`questionText` AS questionText,
                           `questions`.`categoryID` AS categoryID,
                           `answers`.`answerID` AS answerID,
                           `answers`.`answerText` AS answerText,
                           `answers`.`isTrue` AS isTrue
                                 FROM `questions`,`answers`
                                 WHERE `questions`.`questionID` = `answers`.`questionID`
                                 AND `questions`.`categoryID` = 2");

    if (!$result)
    {
        die('Error: ' . mysqli_error($con));
    }

   $rows = array();
   while($r = mysqli_fetch_assoc($result)) {
        $rows[] = $r;
   }
   print json_encode($rows);

    mysqli_close($con);
    ?>

</body>
</head>

And this is how the currently extracted data looks:

[
  {
    "questionID": "2",
    "questionText": "question text 2",
    "categoryID": "2",
    "answerID": "1",
    "answerText": "answer text 1",
    "isTrue": "0"
  },
  {
    "questionID": "2",
    "questionText": "question text 2",
    "categoryID": "2",
    "answerID": "2",
    "answerText": "answer text 2",
    "isTrue": "1"
  },
  {
    "questionID": "2",
    "questionText": "question text 2",
    "categoryID": "2",
    "answerID": "3",
    "answerText": "answer text 3",
    "isTrue": "0"
  },
  {
    "questionID": "2",
    "questionText": "question text 2",
    "categoryID": "2",
    "answerID": "4",
    "answerText": "answer text 4",
    "isTrue": "0"
  }
]
  • 写回答

2条回答 默认 最新

  • doujinyi1267 2013-07-16 19:32
    关注

    This should give you some ideas on how to map your data source to your classes.

      class Exam
      {
          // property declaration
          public $questions = array();
          public $categoryID;
      }
    
      class Question
      {
          // property declaration
          public $questionID;
          public $questionTest;
          public $categoryID;
          public $correctAnswerID;
          public $chosenAnswerID;
          public $answers = array();
      }
    
      class Answer
      {
          // property declaration
          public $answerID;
          public $answerText;
          public $isTrue;
      }
    
    
      class ExamBuilder{
         public function buildExam($data){
            $e = new Exam();
            $e->categoryID = $data->categoryID;
            $this->addQuestions($data->questions, $e);
            return $e;
         }
    
         protected function addQuestions ($questions, Exam $exam){
            foreach ($questions as $question){
               $q = new Question();
               $q->questionID = $question->questionID;
               $q->questionTest = $question->questionTest;
               $q->categoryID = $question->categoryID;
               $q->correctAnswerID = $question->correctAnswerID;
               $q->chosenAnswerID = $question->chosenAnswerID;
               $this->addAnswers($question->answers, $q);
               $exam->questions[] = $q;
            }
         }
    
         protected function addAnswer($answer, Question $question){
            $a = new Answer();
            $a->answerID = $a->anwerID;
            $a->answerText = $answer->answerText;
            $a->isTrue = $answer->isTrue;
         }
      }
    

    To use

     $builder = new ExamBuilder();
     $exam = $builder->buildExam($data);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题