CRM и платформы данных

PHP и MySQL: экспорт запроса в файл с разделителями табуляцией или файл CSV

В эти выходные я хотел построить PHP страница, которая будет резервировать любые MySQL запрос или таблицу в файл с разделителями табуляции. В большинстве примеров в сети столбцы жестко закодированы.

В моем случае я хотел, чтобы столбцы были динамическими, поэтому мне пришлось сначала перебрать все имена полей таблицы, чтобы построить строку заголовка с именами столбцов, а затем перебрать все записи для оставшихся строк данных. Я также установил заголовок, чтобы браузер инициировал загрузку файла в формате (txt) с именем файла, датой и отметкой времени.

Экспорт с разделителями табуляции из MySQL в PHP

<?php
$today = date("YmdHi");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$today."_Backup.txt\"");
$conn = new mysqli("hostname", "username", "password", "database_name"); // Replace with your database credentials

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$query = "SELECT * FROM `mytable` ORDER BY `myorder`";
$result = $conn->query($query);

if ($result->num_rows > 0) {
    $fields = $result->fetch_fields();
    
    // Prepare the header row
    $header = [];
    foreach ($fields as $field) {
        $header[] = $field->name;
    }
    $data = implode("\t", $header) . "\n";

    // Fetch and process the data rows
    while ($row = $result->fetch_assoc()) {
        $rowValues = [];
        foreach ($fields as $field) {
            $rowValues[] = $row[$field->name];
        }
        $data .= implode("\t", $rowValues) . "\n";
    }

    // Output the data
    echo $data;
} else {
    echo "No data found";
}

// Close the database connection
$conn->close();
?>

Давайте шаг за шагом пройдемся по коду с пояснениями к каждой части:

<?php
// Get the current date and time in a specific format
$today = date("YmdHi");

// Set HTTP headers for file download
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$today."_Backup.txt\"");

// Create a MySQL database connection
$conn = new mysqli("hostname", "username", "password", "database_name"); // Replace with your database credentials

// Check if the database connection was successful
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
  • Мы генерируем текущую дату и время в формате «YmdHi» и сохраняем их в $today Переменная.
  • Заголовки HTTP указывают, что контент следует обрабатывать как поток октетов (двоичные данные), и запускают загрузку файла с указанным именем файла.
  • Используя расширение, мы создаем соединение с базой данных MySQL, заменяя заполнители вашими фактическими учетными данными базы данных.
  • Проверяем, удалось ли подключение к базе данных. Мы завершаем выполнение сценария и отображаем сообщение об ошибке, если она есть.
// Define the SQL query to select data from the `mytable` table
$query = "SELECT * FROM `mytable` ORDER BY `myorder`";

// Execute the SQL query
$result = $conn->query($query);

// Check if there are any rows returned
if ($result->num_rows > 0) {
    // Fetch the field (column) names
    $fields = $result->fetch_fields();

    // Prepare the header row for the export file
    $header = [];
    foreach ($fields as $field) {
        $header[] = $field->name;
    }
    $data = implode("\t", $header) . "\n";
  • Мы определяем SQL-запрос для выбора всех данных из mytable стол, заказывая его по myorder колонка.
  • Запрос выполняется, а результат сохраняется в $result Переменная.
  • Мы проверяем, возвращены ли какие-либо строки, проверяя num_rows свойство объекта результата.
  • МЫ ИСПОЛЬЗУЕМ fetch_fields() получить имена полей (столбцов) и сохранить их в $fields массив.
  • Строка заголовка для файла экспорта готовится путем перебора имен полей и объединения их с помощью табуляции.
    // Fetch and process the data rows
    while ($row = $result->fetch_assoc()) {
        $rowValues = [];
        foreach ($fields as $field) {
            $rowValues[] = $row[$field->name];
        }
        $data .= implode("\t", $rowValues) . "\n";
    }
  • Мы используем while цикл для извлечения каждой строки данных из набора результатов, используя fetch_assoc().
  • Внутри цикла мы подготавливаем значения каждой строки, проходя по полям и собирая соответствующие данные.
  • Значения для каждой строки объединяются с помощью табуляции для создания строки, разделенной табуляцией, и эта строка добавляется в список. $data Переменная.
    // Output the data to the browser
    echo $data;
} else {
    // If no data is found, display a message
    echo "No data found";
}

// Close the MySQL database connection
$conn->close();
?>
  • Если данные найдены (проверено с помощью num_rows), мы отображаем объединенные данные, которые являются содержимым файла экспорта. Это запускает загрузку файла в браузере пользователя.
  • Если данные не найдены, мы отображаем сообщение о том, что данные недоступны.
  • Закрываем соединение с базой данных MySQL, используя $conn->close() освободить ресурсы.

Этот код эффективно экспортирует данные из таблицы базы данных MySQL в текстовый файл, разделенный табуляцией, и обрабатывает различные сценарии, такие как ошибки подключения к базе данных и пустые наборы результатов.

Экспорт значений, разделенных запятыми, из MySQL в PHP

Я могу изменить код для экспорта данных в виде файла CSV. Вот код, обновленный для экспорта CSV:

<?php
// Get the current date and time in a specific format
$today = date("YmdHi");

// Set HTTP headers for file download
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=\"".$today."_Backup.csv\"");

// Create a MySQL database connection
$conn = new mysqli("hostname", "username", "password", "database_name"); // Replace with your database credentials

// Check if the database connection was successful
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Define the SQL query to select data from the `mytable` table
$query = "SELECT * FROM `mytable` ORDER BY `myorder`";

// Execute the SQL query
$result = $conn->query($query);

// Check if there are any rows returned
if ($result->num_rows > 0) {
    // Prepare the output file handle for writing
    $output = fopen('php://output', 'w');

    // Fetch and process the data rows
    while ($row = $result->fetch_assoc()) {
        // Output each row as a CSV line
        fputcsv($output, $row);
    }

    // Close the output file handle
    fclose($output);
} else {
    // If no data is found, display a message
    echo "No data found";
}

// Close the MySQL database connection
$conn->close();
?>

В этом модифицированном коде:

  • Заголовки HTTP-ответа обновляются, чтобы указать text/csv тип контента, а имя файла имеет расширение «.csv».
  • Вместо того, чтобы вручную создавать содержимое CSV, мы используем fputcsv функция для вывода каждой строки из набора результатов MySQL в виде строки CSV. Эта функция обрабатывает форматирование CSV, включая обработку специальных символов и заключение полей в двойные кавычки, когда это необходимо.
  • Мы открываем дескриптор выходного файла, используя fopen с «php://output» в качестве имени файла. Это позволяет нам писать непосредственно в поток вывода HTTP-ответа.
  • Код структурирован для эффективной обработки экспорта CSV и закрывает дескриптор файла по завершении.

Этот код экспортирует данные из таблицы MySQL в виде файла CSV, что позволяет пользователям легко открывать их и работать с ними в таких приложениях для работы с электронными таблицами, как Excel. Не забудьте заменить учетные данные базы данных своими собственными.

Douglas Karr

Douglas Karr является директором по маркетингу OpenINSIGHTS и основатель компании Martech Zone. Дуглас помог десяткам успешных стартапов MarTech, помог в комплексной проверке приобретений и инвестиций Martech на сумму более 5 миллиардов долларов, а также продолжает помогать компаниям во внедрении и автоматизации их стратегий продаж и маркетинга. Дуглас — международно признанный эксперт по цифровой трансформации, а также эксперт в области MarTech и спикер. Дуглас также является автором опубликованного руководства для чайников и книги по бизнес-лидерству.

Статьи по теме

Вернуться к началу кнопки
Закрыть

Adblock обнаружен

Martech Zone может предоставить вам этот контент бесплатно, потому что мы монетизируем наш сайт за счет доходов от рекламы, партнерских ссылок и спонсорства. Мы были бы признательны, если бы вы удалили блокировщик рекламы при просмотре нашего сайта.