2016-01-14 2 views
0

Удивительно, если кто-то может мне помочь, я нашел приведенный ниже код и изменил его в соответствии с моими потребностями, я пытаюсь загрузить все данные из инструкции SELECT в файл csv с заголовками столбцов в соответствии с именем столбца, но он бросает ошибку в export (файл csv) для заголовков столбцов, и я не уверен, почему.PHP PDO stmt to CSV download - заголовки строк не работают

Я получаю правильные данные, но не возвращая имена столбцов.

это ошибка:

Notice: Undefined index: Field in....

здесь код изменен без правильного ВЫБИРАЕТ:

try { 
    $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password); 
    $stmt = $dbh->prepare("SELECT * FROM users"); 
    $stmt->execute(); 
    $fields = array(); 
    $csv = array(); 
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
     array_push($fields, $row['Field']); 
    } 

    array_push($csv, $fields); 
    $stmt = $dbh->prepare("SELECT * FROM users"); 
    $stmt->execute(); 
    while ($row = $stmt->fetch(PDO::FETCH_NUM)) { 
     array_push($csv, $row); 
    } 

    $fp = fopen('file.csv', 'w'); 
    foreach($csv as $row) { 
     fputcsv($fp, $row); 
    } 

    fclose($fp); 
    header("Content-type: application/csv"); 
    header("Content-Disposition: attachment; filename=export.csv"); 
    header("Pragma: no-cache"); 
    header("Expires: 0"); 
    readfile('file.csv'); 
    $dbh = null; 
} catch(PDOException $e) { 
    echo $e->getMessage(); 
} 
+0

не 100%, что вы имеете в виду здесь извините, я пытался как поле и поле, и и как вернуть ту же ошибку – odd

ответ

2

Вы можете получить имя столбца из array key в $row при выборке с PDO::FETCH_ASSOC

Я изменил ваш сценарий, чтобы продемонстрировать. Также вы не нужно два запросов SQL, чтобы достичь желаемого результата:

try 
{ 
    $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password); 
    $stmt = $dbh->prepare("SELECT * FROM cities"); 
    $stmt->execute(); 
    $fields = array(); 
    $csv = array(); 

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
    { 
     if (empty($fields)) 
     { 
      $fields = array_keys($row); 
      array_push($csv, $fields); 
     } 

     array_push($csv, $row); 
    } 

    $fp = fopen('file.csv', 'w'); 

    foreach ($csv as $row) 
    { 
     fputcsv($fp, $row); 
    } 

    fclose($fp); 
    header("Content-type: application/csv"); 
    header("Content-Disposition: attachment; filename=export.csv"); 
    header("Pragma: no-cache"); 
    header("Expires: 0"); 
    readfile('file.csv'); 
    $dbh = null; 
} 
catch (PDOException $e) 
{ 
    echo $e->getMessage(); 
} 
+0

спасибо очень для этого, это работает отлично, спасибо снова – odd

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