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

时间:2013-03-19 04:11:44

标签: 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;
}

这是相关功能。它运行查询并将结果放入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  

SQLite3:

51    27    836    435    1102    245    88    1293  
33    30    401    3489   415     3475   4722  2655  

有人可以解释为什么会这样吗?

编辑:道歉。我用嵌入式代码替换了贴纸。应该考虑这样做。

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

1 个答案:

答案 0 :(得分:9)

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

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