如何将 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));
我正在处理现有的 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));