【问题标题】:PHP/MySQL: Storing Multiple Values in Database ColumnPHP/MySQL:在数据库列中存储多个值
【发布时间】:2012-11-26 05:59:14
【问题描述】:

我有一个表格可以让你输入电话号码。您可以单击加号按钮并添加更多字段。我需要将所有这些值存储在数据库中,但只有一列可以做到。

电话号码也是一个类型下拉列表,您可以在其中选择以下内容:手机、家庭和工作。所以我需要一种方法将每个字段的类型和数字配对在一起,然后将所有配对组合在一起。然后稍后当我需要信息时,能够将其全部提取出来并将所有值放入一个数组中。几乎就像加密和解密一样。

我在想这样的事情:

type:number;type:number;type:number;type:number;type:number;type:number

能够使用explode和implode进行加密和解密。

但这有多好?我还有一个搜索电话号码的搜索功能。我想我的方式对于搜索功能来说并不容易。

【问题讨论】:

  • 只是不要这样做。使用类型列和记录 ID 为每个电话号码创建一个新行并不难。这样做没有任何好处。

标签: php mysql database arrays


【解决方案1】:

PHP 代码:

$delimiter = "|";
if (isset($_POST['editfill_mobile'])) {
        $mobileArray = $_POST['editfill_mobile'];
        $replymobile = "";
        $i = 0;
        foreach ($mobileArray as $key => $value) {
            $i++;
            $replymobile .= $value;
            $replymobile .= $delimiter;
        }
    }

将此 $replymobile 按原样存储在数据库列中。

最终,当您查询数据库时,您可能需要拆分上述字符串以从中解析数据....

【讨论】:

    【解决方案2】:

    我会说这是个坏主意。如果您计划使用有限类型的号码,例如家庭、工作、手机等,我建议您为每个号码添加列。否则,创建一个单独的数据库表“phone_numbers”并将其与您的客户 ID 或类似名称相关联,并添加您喜欢的任意数量的数字。搜索将更快更容易实现。

    如果您仍需要将它们存储在单个字段中,请按照您的建议使用 php implode() 和 explode()。在我这样做的情况下,我会使用我的客户很少想到的字符,例如管道符号“|”作为分隔符。当然,如果我的用户不小心在输入中使用了它,我需要使用 str_replace 或类似的技术来过滤掉它,但最好是它是一个很少使用的字符。

    【讨论】:

    • 嗯,我唯一的问题是我在电子邮件、地址和网站方面也有同样的问题。所以这意味着我需要为每个创建一个不同的表。我也不能为每个添加列,因为我不知道可以输入多少。一个人可以输入 10 个数字,另一个人可以输入 1 个。
    • 一种方法是添加两个表。一个名为 users_data_types(包含“电话号码”、“电子邮件地址”和“网站”等类型,另一个名为 users_data,然后您可以在 users_data 中添加任意数量的用户数据,并使用您想要的类型。
    【解决方案3】:

    搜索肯定是行不通的。特别是如果您使用搜索自动完成之类的功能,您希望能够快速选择以特定数字开头的所有数字。

    有两种选择:添加更多列或为电话号码添加单独的表格,其中仅包含人员的类型、号码和 ID。

    【讨论】:

    • @Tyler Dusty 如果搜索很重要,你真的别无选择,你不想获取和处理所有行只是为了能够在你的数据库中搜索。这可能适用于一些条目,但它确实不能很好地扩展。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 2017-07-22
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    相关资源
    最近更新 更多