这可能是一个简单的问题,但我很难理解如何解决它。我有一个表格,允许用户选择“自定义”或“所有”工作人员“分配给工作。
如果选择了自定义,则用户通过单击每个复选框选择人员,然后将其插入到作业表中。这会产生下面的数组(3,1,10是员工ID)
Array
(
[0] => 3
[1] => 1
[2] => 10
)
如果选择“所有员工”,我首先查询select语句以从staff表中获取所有员工ID,然后将这些ID插入到作业表中,如上所述。但是这会生成数组:
Array
(
[0] => Array
(
[staffID] => 1
[0] => 1
)
[1] => Array
(
[staffID] => 23
[0] => 23
)
[2] => Array
(
[staffID] => 26
[0] => 26
)
[3] => Array
(
[staffID] => 29
[0] => 29
)
)
如何将上面的数组转换为显示的第一个数组?
我正在使用以下代码查询数据库以获取所有员工ID,然后插入它们。
$select = $db->prepare("SELECT staffID FROM staff");
if($select->execute())
{
$staff = $select->fetchAll();
}
for($i = 0; $i<count($staff); $i++)
{
$staffStmt = $db->prepare("INSERT INTO staffJobs (jobID, userID) VALUES (:jobID, :staffID)");
$staffStmt->bindParam(':jobID', $jobID, PDO::PARAM_INT);
$staffStmt->bindParam(':staffID', $staff[$i], PDO::PARAM_INT);
$staffStmt->execute();
}
第一个数组插入正常,但最后一个数组为staffID插入零。
有什么建议吗?
谢谢=)。
答案 0 :(得分:96)
请查看手册中的example 2。在第一个查询中,您可以使用:
$staff = $select->fetchAll(PDO::FETCH_COLUMN, 0);
你的第二个数组与第一个数组的形式相同。
答案 1 :(得分:3)
如果print_r($staff[$i])
内有for
你可能会得到
Array
(
[staffID] => 1
[0] => 1
)
表示您应该使用$staff[$i]['staffID']
代替。
使用PDOStatement::fetchColumn()
代替fetchAll()
的另一种方法是使用{{1}}。
答案 2 :(得分:2)