PDO将所有数组提取到一维

这可能是一个简单的问题,但我很难理解如何解决这个问题。 我有一个表格,允许用户select“自定义”或“全部”职员“分配给一份工作。

如果select自定义,则用户通过单击每个checkbox来select人员,然后将其插入到作业表中。 这产生下面的数组(3,1,10是员工ID)

Array ( [0] => 3 [1] => 1 [2] => 10 ) 

如果select“全部员工”,我首先查询select语句,从员工表中获取所有员工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。

有什么build议么?

谢谢=)。

看看手册中的例子2 。 在你的第一个查询中,你可以使用:

 $staff = $select->fetchAll(PDO::FETCH_COLUMN, 0); 

而你的第二个数组将具有与第一个数组相同的forms。

如果你print_r($staff[$i])在你可能会得到的

  Array ( [staffID] => 1 [0] => 1 ) 

这意味着你应该使用$staff[$i]['staffID']来代替。


另一种替代方法是使用您当前的代码,而不是使用fetchAll()来使用PDOStatement::fetchColumn() fetchAll()

你需要给fetchAll一个获取样式

 $staff = $select->fetchAll(PDO::FETCH_NUM); 

从这个链接