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

How to Convert MySQL Column Value From Array to String

我正在处理现有的 HTML 表单,该表单用于收集有关项目的数据,然后使用 PHP.

将该项目记录插入到 MySQL 数据库中

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

<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>

出于示例目的,用户 selects Tyrone、Rod 和 David 用于此特定项目。如果我们在此时插入记录,数据库只存储第一个记录值,这将是 Tyrone 的 ID 2。一般做法是将每个实例存储在单独的 table 中,但这不是我们的系统,由于对于每个项目 4 名成员的限制,为了方便起见,管理层希望我们在每个项目的人员列中插入一个逗号分隔的数组。

为了处理这个问题,我们创建了一个 foreach 循环,循环遍历下拉菜单中的 selected 值,同时确保尾随逗号不存在:

// 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))并将记录插入到'projects'table 没有问题。

问题就在这里。

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

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

在此页面上,我可以使用以下变量赋值保存员工列表:

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

如果 'staff' 列只接受一名员工(例如,只有一个值 4),变量的值将是一个数字:

$project['project_employee'] (4)

然后我将能够 运行 对员工进行二次查询:

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

这很容易带回 "staff" 列中输入的一名员工。但是,我们正在处理此列值 (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"

有没有人有什么想法?

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

在此先感谢您提供的任何帮助。

根据您的说法,我很确定您要存储的字符串 $employee_list 可能是“2,3,4”。那么你的 IN ($employee_list) 实际上是 IN ('2,3,4') 但你真正想要的是 IN (2,3,4)。有多种方式可以到达那里,但您可以

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