PHP fputcsv, выводящий двойные записи - PullRequest
2 голосов
/ 14 февраля 2011

Я использую этот код fputcsv:

$result = mysql_query('SELECT * FROM `mash`');
if (!$result) die('Couldn\'t fetch records');
$fp = fopen('testCSV.csv', 'w');
if ($fp && $result) {
    while ($row = mysql_fetch_array($result)) {
        fputcsv($fp, array_values($row));
    }
    die;
}
fclose($fp);

Он отлично выводит CSV, но для каждого столбца mysql есть два столбца (так что все дублируется)

Кто-нибудь может понять, почемучто будет?

Ответы [ 3 ]

6 голосов
/ 14 февраля 2011

попробуйте это:

$result = mysql_query('SELECT * FROM `mash`');
if (!$result) die('Couldn\'t fetch records');
$fp = fopen('testCSV.csv', 'w');
if ($fp && $result) {
    while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
        fputcsv($fp, array_values($row));
    }
    die;
}
fclose($fp);

mysql_fetch_array вернет объединенный массив по умолчанию, это только ассоциативный массивИли используйте MYSQL_NUM для нумерации - http://php.net/manual/en/function.mysql-fetch-array.php

1 голос
/ 14 февраля 2011

http://php.net/manual/en/function.mysql-fetch-array.php

Второй параметр mysql_fetch_array является ключевым здесь.По умолчанию выбирается ОБА ключ ant ant int.Вы, вероятно, хотите перейти в MYSQL_ASSOC здесь.

0 голосов
/ 14 февраля 2011

mysql_fetch_array() возвращает числовой и ассоциативный индексы по умолчанию:

Цитирование руководства (выделено мое):

Возвращает массив строк, которые соответствует извлеченному ряду, или ЛОЖЬ, если строк больше нет. тип возвращаемого массива зависит от того, как тип_результата определен. Используя MYSQL_BOTH (по умолчанию), вы получите массив с ассоциативным и числовым индексы. Используя MYSQL_ASSOC, вы только получить ассоциативные индексы (как mysql_fetch_assoc () работает), используя MYSQL_NUM, вы получаете только числовые индексы (как работает mysql_fetch_row ()).

Решение:

  • Использование mysql_fetch_assoc()
  • или: mysql_fetch_array($result, MYSQL_ASSOC)
...