PHP fputcsv выводит двойные записи

Я использую этот код 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 есть два столбца (поэтому все удваивается)

кто-нибудь может понять, почему это было бы?


person benhowdle89    schedule 14.02.2011    source источник
comment
Если запрос терпит неудачу, вы die завершаете программу, поэтому нет смысла проверять $result позже, когда она не может быть ложной. Вы также die после того, как ваш цикл завершает программу, прежде чем вы закроете указатель файла. Почему?   -  person Dan Grossman    schedule 14.02.2011


Ответы (3)


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

$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

person Brian    schedule 14.02.2011
comment
большое спасибо за этот ответ. У меня возникла проблема, описанная в этом посте, и ваш ответ полностью устранил проблему, с которой я столкнулся. Благодарю вас! - person JeremyCanfield; 02.04.2016

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

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

person blongden    schedule 14.02.2011

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

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

Возвращает массив строк, соответствующих выбранной строке, или FALSE, если строк больше нет. Тип возвращаемого массива зависит от того, как определяется result_type. Используя MYSQL_BOTH (по умолчанию), вы получите массив как с ассоциативными, так и с числовыми индексами. Используя MYSQL_ASSOC, вы получаете только ассоциативные индексы (как работает mysql_fetch_assoc()), используя MYSQL_NUM, вы получаете только числовые индексы. индексы (как работает mysql_fetch_row()).

Решение:

person Aron Rotteveel    schedule 14.02.2011