繁体   English   中英

将数组存储在数据库中并将其作为数组从数据库取回的最佳方法

[英]best way to store an array in database and getting it back as array from database

因此,我有这些html输入,可以使用javascript重新生成它们,以允许用户输入他的体验历史记录,因此,假设此代码生成两次,如下所示

<!-- User Experiense 1 -->
<label>Company Name</label>
<input type="text" class="form-control" name="company_name[]">

<label for="job-title">Job Title</label>
<input type="text" class="form-control" name="job_title[]">

<label for="dates">From</label>
<input type="date" class="form-control" name="start_date[]">

<label for="dates">To</label>
<input type="date" class="form-control" name="end_date[]">

<!-- User Experiense 2 -->
<label>Company Name</label>
<input type="text" class="form-control" name="company_name[]">

<label for="job-title">Job Title</label>
<input type="text" class="form-control" name="job_title[]">

<label for="dates">From</label>
<input type="date" class="form-control" name="start_date[]">

<label for="dates">To</label>
<input type="date" class="form-control" name="end_date[]">

这些是数据库company_name job_title start_date end_date中的列

这是PHP代码

$js_company_name = [];
if(isset($_POST['js_company_name'])){   
   foreach($_POST['js_company_name'] as $selected) {
     $js_company_name[] = $selected ;
  }
}

$js_job_title = [];
if(isset($_POST['job_title'])){
   foreach($_POST['job_title'] as $selected) {
      $job_title[] = $selected;
   }
 }

$start_date= [];
if(isset($_POST['start_date'])){
   foreach($_POST['start_date'] as $selected) {
      $start_date[] = $selected;
   }
 }

$end_date= [];
if(isset($_POST['end_date'])){
   foreach($_POST['end_date'] as $selected) {
      $end_date[] = $selected;
   }
 }

我尝试使用serialize()unserialize()函数,但我认为它不是最佳解决方案,尤其对于大数据,它会出现很多错误。 所以我希望是否有更好的解决方案将数组存储在数据库中,在此先感谢:)

您根本不应该。 这不仅违反了关系数据库设计的第一种常规形式 ,而且当所有连接应为“体验”实体的东西都是数组索引计数器时,您也可能成为对齐错误的受害者。

例如:如果不是所有字段都是必填字段,那么空表单条目会创建一个空数组值吗? 这可能取决于提交表单的客户端(浏览器)。

无论如何,这都是不好的数据库设计,您应该真正考虑将此概念建模为UserExperience或类似内容,并将其与用户进行多对一连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM