2013-03-19 3 views
2
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-массив. Изменение запроса для выбора только одного поля без условий по-прежнему возвращает две вещи.pdo-> query() возвращает два из каждого результата?

Код возвращает правильные данные, только каждая запись дублируется, т. Е. Строка из восьми превращается в строку 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, что вызывает эту проблему. Я нашел неправильное место для решения.
Docs здесь, для получения дополнительной информации: http://www.php.net/manual/en/pdostatement.fetch.php

+1

Покажите нам код здесь, пожалуйста, не только на скрипке –

+0

Пожалуйста, вставьте свой код непосредственно в вопрос, а не отправляйте его на внешнюю службу, такую ​​как pastebin. Внешний код может уйти в любой момент, и нет контроля над версией, как с вопросами SO. Поэтому будущие читатели, вероятно, не смогут увидеть внешний код, и поэтому этот вопрос будет бесполезным или не имеет большого смысла. ** StackOverflow - это больше о будущих ссылках для других, так как речь идет о том, как вы получили свой вопрос сегодня. ** –

+0

Вы также можете показать нам, что такое эхо-печать. – MatRt

ответ

8

«По умолчанию PDO будет получать массив результатов, индексированных по имени столбца и по номерам столбцов (т.е. значения из БД появляются в массиве дважды, с двумя различными. ключи). Поэтому, если вы используете режим выборки по умолчанию, вы, вероятно, будете ездить на велосипеде через оба из представлений набора результатов. ' Спасибо, Лив, это объяснение помогает.

Решение: Установите режим выборки по умолчанию с помощью PDOStatement :: setAttribute(); по умолчанию используется FETCH_BOTH, что вызывает эту проблему. Я нашел неправильное место для решения. Документы здесь, для получения дополнительной информации: http://www.php.net/manual/en/pdostatement.fetch.php

+0

Наверное, я не могу принять свой собственный ответ еще на два дня. – matt

+0

Настройка режима выборки по умолчанию полезна, когда у меня была та же проблема. http://stackoverflow.com/a/4386731/46971 – GabrielC

Смежные вопросы