首页 > 解决方案 > 来自 PDO 查询的 SQL 结果数组具有重复值

问题描述

我有一个具有以下字段的 mysql 表

STUDENTID  |  FIRSTNAME |  SURNAME  |  DOB   |  SCHOOLID

表单用于用户搜索学生并输出所有匹配名字和姓氏的学生

以下 SQL 语句返回 PDO 罚款


$sqlstmnt2 = 'SELECT * FROM students WHERE firstName = :fname AND surname = :sname AND schoolID = :schoolID';

// prepare PDOstatement as $query ...
// ...

$query->execute();
$_SESSION['foundPupils'] = $query->fetchAll();

但是,当我将它传递到会话变量中的另一个 PHP 页面时,我对如何单独访问每个字段感到困惑。我有以下代码

foreach($_SESSION['foundPupils'][0] as $found){
    echo($found);
}

这会输出找到的数据,但问题是它会输出两次,而且它只是一长串数据,无法很好地格式化。我的问题是:

为什么每个结果输出两次?如何访问此数组中的各个字段(例如,类似于 foundPupils[0]['firstName']?

标签: phpmysqlpdo

解决方案


根据文档,方法PDOStatement::fetchPDOStatement::fetchAll都接受一个$fetch_style参数。如果未设置,则默认值为PDO::FETCH_BOTH。这意味着获取的数组将按位置(例如 0、1、2)和列名(例如"firstName""surname")引用字段。

因此,默认情况下,您获取的结果将是这样的:

Array
(
    [0] => Array
        (
            [name] => apple
            [0] => apple
            [colour] => red
            [1] => red
        )

    [1] => Array
        (
            [name] => pear
            [0] => pear
            [colour] => green
            [1] => green
        )

    [2] => Array
        (
            [name] => watermelon
            [0] => watermelon
            [colour] => pink
            [1] => pink
        )

)

要解决此问题,您需要使用fetch 样式调用 fetch 函数(我想它是PDOStatement::fetchAll) :PDO::FETCH_COLUMN

$query->execute();
$_SESSION['foundPupils'] = $query->fetchAll(PDO::FETCH_COLUMN);

推荐阅读