【问题标题】:Use of delimiters when storing checkbox data in MySQL databases在 MySQL 数据库中存储复选框数据时使用分隔符
【发布时间】:2013-12-10 19:22:34
【问题描述】:

我正在尝试将已发布的网络表单中的数据存储在 MySQL 数据库中。

通常,对于简单的文本或数字输入,每个输入都有一个与特定问题相关的 ID,因此每个答案都会在“答案”表中创建一个新记录

例如

<input type="text" value="hello" id="qid_101" name="q_101">

发布后,我使用 php 去除 qid 编号并将其存储到该值。

但是,当复选框组发布数据时,结果是一个数组,即

<div class="checkboxes">
  <div>
    <input   type="checkbox" value="A " name="checkboxes[]" />
    <span class="inline">a</span>
  </div>
  <div>
    <input   type="checkbox" value="B" name="checkboxes[]" />
    <span class="inline">b</span>
  </div>
  <div>
    <input   type="checkbox" value="C" name="checkboxes[]" />
    <span class="inline">c</span>
  </div>
</div>

给我一​​个名为 checkboxes 的数组,我不能直接将其存储在数据库中。

Following the advise of others on SO我打算将数组内爆成一个字符串和故事,然后在引用它时再次爆炸。

我有两个问题:

1) 这对我来说是一种不好的做法,因为它正在对我的数据进行非规范化,但我想不出另一种方法来做到这一点(存储的答案对于用户和问题 ID 是唯一的 - 所以存储每个复选框针对相同问题 ID 的值会破坏网站的其他部分)

2) 内爆数组时使用什么好的分隔符 - 是否有一个我应该在 MySQL 中避免使用的字符列表以避免混淆?

【问题讨论】:

    标签: php mysql checkbox


    【解决方案1】:

    如果已知您的答案集仅是 alpha,则逗号是足够的分隔符。如果没有,请使用serialize() 函数将值数组存储为字符串并将其存储在 MySQL 中。

    我同意非规范化有点不稳定。在不了解您的应用程序的情况下,我很想添加一个连接表(user_id、question_id、answer)来存储每个用户的多个答案。

    【讨论】:

    • 是的 - 我需要了解更多关于 JOIN 表的信息,因为我目前不使用它们,我怀疑它们是我正在寻找的答案。感谢您提供有关 serialize() 的信息 - 它以字符串形式存储和数组?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多