PDO将全部数组提取到一维


PDO fetchAll array to one dimensional

这可能是

一个简单的问题,但我正在努力理解如何解决它。我有一个表格,允许用户选择"自定义"或"所有"员工"来分配给工作。

如果选择了自定义,则用户通过单击每个复选框来选择员工,然后我将其插入到作业表中。这将生成下面的数组(3、1、10 是员工 ID)

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

如果选择了"所有员工",我首先查询一个 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 插入零。

有什么建议吗?

谢谢=)。

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

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

您的第二个数组将具有与第一个数组相同的形式。

如果你print_r($staff[$i])for里面,你可能会得到

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

这意味着您应该改用$staff[$i]['staffID']


另一种应该适用于您当前代码的替代方法是使用 PDOStatement::fetchColumn() 而不是 fetchAll() .

你需要给 fetchAll 一个 fetch 风格

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

从此链接