PDO fetchAll 数组到一维

Posted

技术标签:

【中文标题】PDO fetchAll 数组到一维【英文标题】:PDO fetchAll array to one dimensional 【发布时间】:2011-08-28 05:03:20 【问题描述】:

这可能是一个简单的问题,但我很难理解如何解决它。我有一个表单,允许用户选择“自定义”或“所有”员工来分配工作。

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

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

如果选择“所有员工”,我首先查询一个选择语句,从员工表中获取所有员工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 插入零。

有什么建议吗?

谢谢 =)。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

谢谢!您的链接帮助我找到了如何获取 staffID-indexed 数组:$select-&gt;fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP)。很酷的东西【参考方案2】:

如果您在for 中使用print_r($staff[$i]),您可能会得到

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

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


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

【讨论】:

谢谢,但这不会要求我使用两种不同的方法吗?比如第一个数组不包含“staffID”,是不是不能完全去掉“staffID”,只用编号引用? @Elliot:我明白你的意思了,fetchColumn() 应该适用于这两种情况。【参考方案3】:

你需要给 fetchAll 一个 fetch 样式

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

来自this link

【讨论】:

以上是关于PDO fetchAll 数组到一维的主要内容,如果未能解决你的问题,请参考以下文章

MySQL PDO fetchAll 作为具有整数索引的数组

PDO->fetchAll() 在远程服务器上返回空数组

PDO中获取结果集之fetchAll()方法详解

MySQL PDO fetchAll作为格式的数组

PDO fetchAll 返回空数组,但是可以显示count数量?

PDO::fetchAll 与 PDO::fetch 循环