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
Может ли кто-нибудь объяснить, почему это происходит?
EDIT: Мои извинения. Я заменил пасты встроенным кодом. Должен был подумать об этом.
EDIT EDIT: Решение: установите режим выборки по умолчанию с помощью PDOStatement :: setAttribute (); по умолчанию используется FETCH_BOTH, что вызывает эту проблему. Я нашел неправильное место для решения.
Документы здесь, для получения дополнительной информации: http://www.php.net/manual/en/pdostatement.fetch.php
«По умолчанию PDO будет получать массив результатов, индексированных по имени столбца и номерам столбцов (т. Е. Значения из БД отображаются в массиве дважды, с двумя разными ключами). Поэтому, если вы используете режим выборки по умолчанию, вы, вероятно, будете ездить на велосипеде через оба из представлений набора результатов. ' Спасибо, Лив, это объяснение помогает.
Решение. Установите режим выборки по умолчанию с помощью PDOStatement :: setAttribute (); по умолчанию используется FETCH_BOTH, что вызывает эту проблему. Я нашел неправильное место для решения. Документы здесь, для получения дополнительной информации: http://www.php.net/manual/en/pdostatement.fetch.php