pdo-> query()返回每个结果中的两个?

mat*_*att 3 php sql sqlite pdo

function readDB($db,$event)
{
    try {
        $rows = array();
        $sql = "SELECT \"Red Score\", \"Blue Score\", red1, red2, red3, blu1, blu2, blu3 FROM Matches WHERE Event='$event' AND Type='Q' ORDER BY Number;";
        foreach($db->query($sql) as $row)
        {
            $rows[] = $row;
            echo count($row) . "<br/>";
        }
        printArray($rows);
    } catch(PDOException $e) {
        $rows = 'aids';
        echo $e->getMessage();
    }

    $db = null;
}
Run Code Online (Sandbox Code Playgroud)

这是相关的功能.它运行查询并将结果放入2D数组中.更改查询以仅选择一个没有条件的字段仍会返回两件事.

代码返回正确的数据,只是每个记录都是重复的,即一行八行变成16行.在SQLite3控制台中运行时的查询返回一次.
示例:
PHP:

51    51    27    27    836    836    435    435    1102    1102    245    245    88    88    1293    1293  
33    33    30    30    401    401    3489   3489   415     415     3475   3475   4722  4722  2655    2655  
Run Code Online (Sandbox Code Playgroud)

SQLite3的:

51    27    836    435    1102    245    88    1293  
33    30    401    3489   415     3475   4722  2655  
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么会这样吗?

编辑:道歉.我用嵌入式代码替换了贴纸.应该想到这样做.

编辑编辑:解决方案:使用PDOStatement :: setAttribute()设置默认提取模式; 它默认为FETCH_BOTH导致此问题.我找错了地方寻求解决方案.
文档在这里,有关更多信息:http://www.php.net/manual/en/pdostatement.fetch.php

mat*_*att 9

'默认情况下,PDO将获取由列名和列号索引的结果数组(即,数据库中的值出现在数组中两次,具有两个不同的键).因此,如果您正在使用默认的提取模式,那么您可能会循环浏览结果集的两个表示形式.谢谢Liv,这个解释很有帮助.

解决方案:使用PDOStatement :: setAttribute()设置默认提取模式; 它默认为FETCH_BOTH导致此问题.我找错了地方寻求解决方案.文档在这里,有关更多信息:http://www.php.net/manual/en/pdostatement.fetch.php