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 配列に入れます。条件なしで 1 つのフィールドのみを選択するようにクエリを変更しても、2 つのものが返されます。
コードは正しいデータを返します。各レコードが複製されます。つまり、8 行が 16 行になります。クエリを SQLite3 コンソールで実行すると、それぞれが 1 回ずつ返されます。
サンプル:
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
なぜこれが起こっているのか誰か説明できますか?
編集:申し訳ありません。ペーストを埋め込みコードに置き換えました。そうしようと思ったはずです。
EDIT EDIT: 解決策: PDOStatement::setAttribute(); でデフォルトのフェッチ モードを設定します。この問題の原因となっている FETCH_BOTH にデフォルト設定されています。解決策を探すのに間違った場所を探しました。
詳細については、ドキュメントをご覧ください: http://www.php.net/manual/en/pdostatement.fetch.php