Intereting Posts
Mysql Выберите вторую строку Как исправить ошибку «Заголовки уже отправлены» в PHP PHP Soap и .Net Dataset Передача результатов запроса базы данных в jQuery Sparkline Charts с использованием PHP Как отсортировать результаты MySQL с буквами сначала, символы последними? выделите слово в строке, если оно содержит ключевое слово Один блок вызова ajax другой вызов ajax PHP-эквивалент javascript >>> shift right с нулевыми заполняющими побитовыми операторами? Объедините два массива бок о бок, где один может быть короче другого Что такое $ variable?: Do? Использовать метод регистрации по умолчанию Alter Laravel? Как добавить новую строку языка в WordPress? Стационарный метод в PHP имеет какую-либо разницу с нестационарным методом? PHP – запрашивать одно значение для каждой итерации или извлекать все при запуске и извлекать из массива? Изменение параметра конфигурации php.ini в phpunit.xml

PHP: запись запроса MYSQL в CSV

Я пытаюсь написать запрос MySQLi в загружаемый CSV. Следующие заголовки открывают поток для CSV:

$fileName = ''; //empty file name, file name is cast later header("Cache=Control: must-revalidate, post-check=0, pre-check=0"); header('Content-Description: File Transfer'); header("Content-type: text/csv"); header("Content-Disposition: attachment; filename={$fileName}"); header("Expires: 0"); header("Pragma: public"); $fh = @fopen( 'php://output', 'w' ); 

Ниже я имею следующее, которое пытается запросить и отбросить каждую строку запроса к новой строке в файле CSV:

 if(isset($_POST["Submit"]) && ($_POST['Weight'] == 'Weight')){ $fileName .= 'OutputWeightNull.csv'; $query = mysqli_query($conn, 'SELECT * FROM `Some_Table` WHERE WEIGHT = 0 OR weight IS NULL')or die(mysql_error()); $result = mysqli_fetch_array($query) or die(mysql_error()); $headerDisplayed = false; foreach ($result as $data){ if (!headerDisplayed){ fputcsv($fh, array_keys()); $headerDisplayed = true; } fputcsv($fh, $data); } } 

CSV загружается в браузер по своему желанию, однако он выглядит пустым, результаты запроса не отправляются в CSV. Может ли кто-нибудь указать мне в правильном направлении, почему это может быть.

Это моя первая попытка скрипта PHP, более сложного, чтобы приветствовать мир. Извините, если ответы очень просты или очевидны.

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

     if(isset($_POST["Submit"]) && ($_POST['Weight'] == 'Weight')){ $fileName = 'OutputWeightNull.csv'; $fh = @fopen( 'php://output', 'w' ); header("Cache=Control: must-revalidate, post-check=0, pre-check=0"); header('Content-Description: File Transfer'); header("Content-type: text/csv"); header("Content-Disposition: attachment; filename={$fileName}"); header("Expires: 0"); header("Pragma: public"); $query = mysqli_query($conn, 'SELECT * FROM `Some_Table` WHERE WEIGHT = 0 OR weight IS NULL')or die(mysql_error()); $headerDisplayed = false; while($result = mysqli_fetch_array($query, MYSQLI_ASSOC)) { if (!$headerDisplayed){ fputcsv($fh, array_keys($result)); $headerDisplayed = true; } fputcsv($fh, $result); } } 

    вам нужно поместить заголовок csv внутри цикла «if»

    Очистка кода до касания вокруг возвращенных строк и использование функций mysqli_ error:

     <?php if(isset($_POST["Submit"]) && ($_POST['Weight'] == 'Weight')) { $fileName = ''; //empty file name, file name is cast later header("Cache=Control: must-revalidate, post-check=0, pre-check=0"); header('Content-Description: File Transfer'); header("Content-type: text/csv"); header("Content-Disposition: attachment; filename={$fileName}"); header("Expires: 0"); header("Pragma: public"); $fh = @fopen( 'php://output', 'w' ); $fileName .= 'OutputWeightNull.csv'; $query = mysqli_query($conn, 'SELECT * FROM `Some_Table` WHERE WEIGHT = 0 OR weight IS NULL') or die(mysqli_error($conn)); if ($result = mysqli_fetch_array($query, MYSQLI_ASSOC)) { fputcsv($fh, array_keys($result)); fputcsv($fh, $result); while ($result = mysqli_fetch_array($query, MYSQLI_ASSOC)) { fputcsv($fh, $result); } } } 

    MySQL имеет встроенный тип запроса для вывода данных непосредственно в формат CSV.

    Измените запрос SELECT так, чтобы он был в следующем формате:

     SELECT fieldlist FROM table INTO OUTFILE 'filename.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'; 

    Теперь вам не придется делать какие-либо из этих циклов или что-то в этом роде; все, что нужно PHP, это запустить этот запрос, а затем выполнить readfile() в CSV-файле, сгенерированном MySQL, и, наконец, удалить его с диска.

    Это сэкономит много памяти для вашей PHP-программы, а также будет работать намного быстрее (это будет действительно примечательно, если у вас большой набор данных).