如何将MySQL列值从数组转换为字符串

时间:2015-09-05 19:59:23

标签: php mysql arrays string multi-select

我正在处理一个用于收集项目数据的现有HTML表单,然后使用PHP将该项目记录插入MySQL数据库。

在表单中,有一个名为" staff []"的输入字段。此字段是一个多选元素,允许用户选择多个团队成员来处理项目。

<form action="" method="post">
    <select multiple name="staff[]">
        <option value="1">Mary</option>
        <option value="2">Tyrone</option>
        <option value="3">Rod</option>
        <option value="4">Marcus</option>
        <option value="5">David</option>
    </select>
</form>

例如,用户为此特定项目选择Tyrone,Rod和David。如果我们此时插入记录,数据库只存储第一个记录值,这将是Tyrone的ID为2.一般做法是将每个实例存储在一个单独的表中,但这不是我们的系统和到期对于每个项目限制4个成员,管理层希望我们在每个项目的工作人员栏中插入一个逗号分隔的数组,以方便使用。

为了解决这个问题,我们创建了一个foreach循环,循环显示下拉菜单中的选定值,同时确保尾随逗号不存在:

// Add array into one variable
$staff_count = count($_POST['project_staff']);
$i = 0;
foreach($_POST['project_staff'] as $staff) {
    if (++$i === $staff_count) {
        $member_variable .= $staff;
    } else {
        $member_variable .= $staff . ", ";
    }
}

按下提交按钮后,运行上面的脚本(生成数组值为(2,3,5)),并将记录插入到&#39;项目&#39;表没有问题。

这里有问题。

最后,我们有一个视图页面,我们将根据查询参数调用分配给项目的所有员工,该参数将是项目ID。例如,如果之前的项目ID为6,则将使用以下URL:

site.com/project/view/?project=6

在此页面中,我可以使用以下变量分配来保存人员列表:

$project = "SELECT * FROM projects WHERE project = 6";
$employee_chosen = $project['project_employee']

如果&#39;员工&#39;列只接受一个员工(例如,只有一个值为4),该变量的值为一个数字:

$project['project_employee'] (4)

然后,我可以为员工运行二级查询:

$employee_chosen = $project['project_employee']; (4)
query2 = "SELECT * FROM employees WHERE employee_ID = $employee_chosen";

这很容易让那些输入&#34;员工&#34;柱。但是,我们正在处理此列值(2,3,5)中的数组,因此我查询了以下语句:

$employee_list = $project['project_staff']; (2,3,5)
$query_employees = "SELECT * FROM employees WHERE employee_id IN ($employee_list)";

当我运行此查询时,我只收到员工ID 2的第一个结果(最初用HTML表单说明)。

但是,如果我使用phpMyAdmin直接输入三个数字作为字符串:

$query_employees = "SELECT * FROM employees WHERE employee_id IN (2,3,5)";

我收到了所有三份员工记录。

为了确保列ARRAY实际上表现为STRING,我在值上启动了一个var_dump:

echo var_dump($project['project_staff']);

之后我收到了以下信息:

string(7) "4, 5, 6"

有没有人有任何想法?

我对能够查询该值的想法感到满意,因为之前我收到了几个非对象和数组错误。

提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

我很确定你所说的是你存储的字符串$employee_list可能是'2,3,4'。那么您的IN ($employee_list)确实是IN ('2,3,4'),但您真正想要的是IN (2,3,4)。有多种方法可以实现,但你可以做到

$employee_list = implode(','(explode(',', $employee_list));