php - 在单列 MySQL 数据库中存储数组值

标签 php mysql arrays

在我的申请中,我有表格输入要在办公室举行的培训类(class)的详细信息。所以我将所有详细信息存储在“培训”表中。但是在那一列作为“实习生”,因为我必须填写多个名称。所以我在 html 中使用了多个选择选项,并且我在一个数组中获取了所有名称。然后我将其保存在数据库中。我对该数组进行序列化并将其存储在那里。但只是我想存储名称。此外,我必须获得任何特定受训者的报告,因此我必须在其他页面中再次获得受训者名单。就在下面,我介绍了我的表结构和 php 编码。

CREATE TABLE `training` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` varchar(45) DEFAULT NULL,
  `category` varchar(45) DEFAULT NULL,
  `course` varchar(45) DEFAULT NULL,
  `trainee` varchar(45) DEFAULT NULL,
  `trainer` varchar(45) DEFAULT NULL,
  `startdate` date DEFAULT NULL,
  `enddate` varchar(45) DEFAULT NULL,
  `venue` varchar(45) DEFAULT NULL,
  `status` varchar(45) DEFAULT NULL,
  `comments` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

选择多个学员的表单控件:

<div class="form-group">
    <label for="tr" class="control-label col-md-2">Trainee</label>      
    <div class="col-md-4"> 
          <select  multiple="multiple" id="trainee" name="tr[]" >
            <?php foreach($empresult as $row){ ?>
            <option><?php echo $row['first_name']?></option>
            <?php  } ?>
        </select>       
    </div>
</div>

数据库代码:

        $data= $_POST['tr'];
        $trainees= serialize($data);

        $cat=$_REQUEST['cat'];
        $course=$_REQUEST['course'];
        $venue=trim($_REQUEST['venue']);            
        $ins=$_REQUEST['ins'];  
        $start=$_REQUEST['startdt'];
        $end=$_REQUEST['enddt'];            
        $typ=$_REQUEST['type'];
        $stat=$_REQUEST['stat'];
        $cmt=$_REQUEST['cmt'];      

    $sql = "INSERT INTO training(type,category,course,trainee,trainer,startdate,enddate,venue,status,comments) VALUES " . "(:type,:category,:course,:trainee,:trainer,:startdate,:enddate,:venue,:status,:comments)";       
    try {               
          $stmt = $DB->prepare($sql);           
          // bind the values
            $stmt->bindValue(":type", $typ);
            $stmt->bindValue(":category", $cat);
            $stmt->bindValue(":course", $course);
            $stmt->bindValue(":trainee", $trainees);    
            $stmt->bindValue(":trainer", $ins);
            $stmt->bindValue(":startdate", $start);
            $stmt->bindValue(":enddate", $end);
            $stmt->bindValue(":venue", $venue); 
            $stmt->bindValue(":status", $stat); 
            $stmt->bindValue(":comments", $cmt);    
          $stmt->execute(); 
          }
        } 
        catch (Exception $ex)
        {           
          $_SESSION["errorMsg"] = $ex->getMessage();              
        }   

在数据库中它被保存为:

a:4:{i:0;s:7:"Anu1234";i:1;s:11:"UmaSri12345"

我选择了四个学员,因为我设置了 trainee-varchar(45),所以列表的一半存储在表中。

只是我担心这是否是正确的做法?并仅存储字符串(名称)我能做什么?

最佳答案

我认为将受训者数据保存在不同的表中并在您的训练表中使用该受训者 ID 会很好。谷歌数据库规范化。它会让您了解如何构建数据库。

关于php - 在单列 MySQL 数据库中存储数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35740147/

相关文章:

MySQL:在 alpha 排序中将记录放在最后

php - 需要帮助规划任务管理网站

arrays - 在 MongoDB 的数组数据中查找数组

php - SET Password=$password 后出现语法错误

php - mt_rand() 总是给我相同的数字

php - Laravel 5.2 注册、插入多个表

javascript - 数组按下按钮点击jquery

php - 通过排序将数组元素移动到数组末尾

php - 如何最好地实现数据库驱动的动态 url/ Controller 名称?

javascript - IF 条件的书写顺序正确吗?