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
答案 0 :(得分:9)
'默认情况下,PDO将获取由列名和列号索引的结果数组(即,数据库中的值在数组中出现两次,具有两个不同的键)。因此,如果您正在使用默认的提取模式,那么您可能会循环浏览结果集的两个表示形式。谢谢Liv,这个解释很有帮助。
解决方案:使用PDOStatement :: setAttribute()设置默认提取模式;它默认为FETCH_BOTH导致此问题。我找错了地方寻求解决方案。 文档在此处,以获取更多信息:http://www.php.net/manual/en/pdostatement.fetch.php