CRM ve Veri Platformları

PHP ve MySQL: Bir Sorguyu Sekmeyle Ayrılmış Bir Dosyaya veya CSV Dosyasına Aktarma

Bu hafta sonu bir inşa etmek istedim. PHP herhangi bir şeyi yedekleyecek sayfa MySQL sorguyu veya tabloyu Sekmeyle Ayrılmış bir dosyaya aktarabilirsiniz. İnternetteki örneklerin çoğunda sütunlar sabit kodlanmıştır.

Benim durumumda, sütunların dinamik olmasını istedim, bu nedenle sütun adlarıyla başlık satırını oluşturmak için önce tüm tablo alanı adları arasında döngü yapmam ve ardından kalan veri satırları için tüm kayıtlar arasında döngü yapmam gerekiyordu. Ayrıca başlığı, tarayıcının, dosya tarihi adı ve zaman damgasıyla birlikte dosya türünde (txt) dosya indirmeyi başlatacağı şekilde ayarladım.

PHP'de MySQL'den Sekmeyle Sınırlandırılmış Dışa Aktarma

<?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();
?>

Her parça için açıklamalarla kodu adım adım inceleyelim:

<?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);
}
  • Güncel tarih ve saati “YmdHi” formatında oluşturup saklıyoruz. $today değişkeni.
  • HTTP üstbilgileri, içeriğin bir sekizli akış (ikili veri) olarak ele alınması gerektiğini belirtecek ve belirtilen dosya adıyla bir dosya indirmeyi tetikleyecek şekilde ayarlanmıştır.
  • Uzantıyı kullanarak, yer tutucuları gerçek veritabanı kimlik bilgilerinizle değiştirerek bir MySQL veritabanı bağlantısı oluşturuyoruz.
  • Veritabanı bağlantısının başarılı olup olmadığını kontrol ediyoruz. Bir hata olması durumunda betiği sonlandırıyoruz ve bir hata mesajı görüntülüyoruz.
// 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";
  • Tüm verileri seçmek için SQL sorgusunu tanımlıyoruz. mytable masa tarafından sipariş edilerek myorder sütun.
  • Sorgu yürütülür ve sonuç, $result değişkeni.
  • İnceleyerek döndürülen herhangi bir satır olup olmadığını kontrol ediyoruz. num_rows sonuç nesnesinin özelliği.
  • Biz kullanmak fetch_fields() alan (sütun) adlarını almak ve bunları depolamak için $fields dizisi.
  • Dışa aktarma dosyasının başlık satırı, alan adları arasında döngü yapılarak ve bunların sekmelerle birleştirilmesiyle hazırlanır.
    // 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";
    }
  • Kullanırız while kullanarak sonuç kümesinden her veri satırını almak için döngü fetch_assoc().
  • Döngünün içinde, alanlar arasında yinelemeler yaparak ve ilgili verileri toplayarak her satırın değerlerini hazırlarız.
  • Her satırın değerleri, sekmeyle ayrılmış bir satır oluşturmak için sekmelerle birleştirilir ve bu satır, $data değişkeni.
    // 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();
?>
  • Veri bulunursa (ile kontrol edilir) num_rows), dışa aktarma dosyasının içeriği olan birleştirilmiş verileri yansıtırız. Bu, kullanıcının tarayıcısında dosya indirmeyi tetikler.
  • Hiçbir veri bulunamazsa, veri bulunmadığını belirten bir mesaj görüntüleriz.
  • MySQL veritabanı bağlantısını kullanarak kapatıyoruz. $conn->close() kaynakları serbest bırakmak için.

Bu kod, verileri bir MySQL veritabanı tablosundan sekmeyle ayrılmış bir metin dosyasına verimli bir şekilde aktarır ve veritabanı bağlantı hataları ve boş sonuç kümeleri gibi çeşitli senaryoları işler.

PHP'de MySQL'den Virgülle Ayrılmış Değerler Dışa Aktarma

Verileri CSV dosyası olarak dışa aktarmak için kodu değiştirebilirim. CSV dışa aktarımı için güncellenen kod aşağıda verilmiştir:

<?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();
?>

Bu değiştirilmiş kodda:

  • HTTP yanıtının üstbilgileri, bir text/csv içerik türü ve dosya adı “.csv” uzantısına sahiptir.
  • CSV içeriğini manuel olarak oluşturmak yerine, fputcsv MySQL sonuç kümesindeki her satırın CSV satırı olarak çıktısını alma işlevi. Bu işlev, özel karakterlerin işlenmesi ve gerektiğinde alanların çift tırnak içine alınması da dahil olmak üzere CSV biçimlendirmesini sizin için yönetir.
  • Çıktı dosyası tanıtıcısını kullanarak açıyoruz fopen dosya adı 'php://output' ile. Bu, doğrudan HTTP yanıt çıkış akışına yazmamıza olanak tanır.
  • Kod, CSV dışa aktarımını verimli bir şekilde gerçekleştirecek şekilde yapılandırılmıştır ve işlem tamamlandığında dosya tanıtıcısını kapatır.

Bu kod, verileri MySQL tablosundan CSV dosyası olarak dışa aktararak kullanıcıların Excel gibi elektronik tablo uygulamalarını açmasını ve bunlarla çalışmasını kolaylaştırır. Veritabanı kimlik bilgilerini kendinizinkiyle değiştirmeyi unutmayın.

Douglas Karr

Douglas Karr CMO'su AÇIK İÇGÖRÜLER ve kurucusu Martech Zone. Douglas düzinelerce başarılı MarTech startup'ına yardımcı oldu, Martech satın almaları ve yatırımlarında 5 milyar doların üzerindeki durum tespitine yardımcı oldu ve şirketlere satış ve pazarlama stratejilerini uygulama ve otomatikleştirme konusunda yardımcı olmaya devam ediyor. Douglas, uluslararası alanda tanınan bir dijital dönüşüm ve MarTech uzmanı ve konuşmacısıdır. Douglas aynı zamanda Dummie's Guide ve iş liderliği kitabının yayınlanmış yazarıdır.

İlgili Makaleler

Başa dön düğmeye
Kapanış

Adblock Algılandı

Martech Zone sitemizden reklam geliri, bağlı kuruluş bağlantıları ve sponsorluklar yoluyla para kazandığımız için size bu içeriği ücretsiz olarak sağlayabilir. Sitemizi gezerken reklam engelleyicinizi kaldırırsanız seviniriz.