如何将MySQL列值从数组转换为字符串
我正在使用现有的HTML表单来收集有关项目的数据,然后使用PHP将该项目记录插入到MySQL数据库中。如何将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)的数组值),并且该记录被插入'projects'表中而没有问题。
这里说谎的问题。
最后,我们有一个视图页面,我们将根据查询参数调用分配给项目的所有员工,这将是项目ID。例如,如果以前的项目编号为6,以下URL将用于:
site.com/project/view/?project=6
在此页面中,我可以使用下面的变量赋值拯救人员名单:
$project = "SELECT * FROM projects WHERE project = 6";
$employee_chosen = $project['project_employee']
如果“员工”列仅接受一个雇员(例如如图4所示,只有一个值),则变量将具有一个编号的值:
$project['project_employee'] (4)
然后我将能够运行雇员辅助查询s这样:
$employee_chosen = $project['project_employee']; (4)
query2 = "SELECT * FROM employees WHERE employee_ID = $employee_chosen";
这将很容易地带回在“员工”列中输入的一名员工。然而,我们正在处理在此列中的值的阵列(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)";
我收到的所有三个员工记录。
只是为了确保列数组实际上表现为一个字符串,我开始对价值的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));
你有没有考虑一个不同的模式,有一个多对多的表有一排工作人员的每个成员,每个项目?然后它是一个简单的连接来查找员工的详细信息,而不是查询,解析和重新查询 –
@RowlandShaw我完全同意。然而,客户是一家中等规模的公司,我没有太多喘息空间来提供更好的解决方案。最令我沮丧的是var_dump之后,数组似乎被识别为一个字符串,但查询只返回数组中的第一项。 –
不用括号就可以简单地连接:'$ query_employees =“选择*从雇员哪里employee_id IN”。 $ employee_list;' – Parfait