CRM و سیستم عامل های داده

PHP و MySQL: یک Query را به یک Tab Delimited یا فایل CSV صادر کنید

این آخر هفته، من می خواستم بسازم پی اچ پی صفحه ای که از هر کدام نسخه پشتیبان تهیه می کند خروجی پرس و جو یا جدول در یک فایل Tab Delimited. بیشتر نمونه‌های موجود در شبکه، ستون‌ها را به صورت کدگذاری سخت دارند.

در مورد من، من می‌خواستم ستون‌ها پویا باشند، بنابراین باید ابتدا از میان نام‌های فیلدهای جدول حلقه بزنم تا ردیف سرصفحه را با نام ستون‌ها بسازم و سپس تمام رکوردها را برای ردیف‌های داده باقی‌مانده حلقه بزنم. من همچنین هدر را طوری تنظیم کردم که مرورگر دانلود فایل را در نوع فایل (txt) با نام تاریخ فایل و مهر زمانی آغاز کند.

Tab Delimited Export از 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";
    }
  • ما از a استفاده می کنیم 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 برای مشخص کردن a به روز می شوند text/csv نوع محتوا، و نام فایل دارای پسوند ".csv" است.
  • به جای ایجاد دستی محتوای CSV، از آن استفاده می کنیم fputcsv تابعی برای خروجی هر ردیف از نتیجه MySQL که به عنوان یک خط CSV تنظیم شده است. این تابع قالب‌بندی CSV را برای شما انجام می‌دهد، از جمله مدیریت کاراکترهای خاص و در صورت لزوم فیلدها را در گیومه‌های دوگانه قرار می‌دهد.
  • دسته فایل خروجی را با استفاده از آن باز می کنیم fopen با "php://output" به عنوان نام فایل. این به ما امکان می دهد مستقیماً در جریان خروجی پاسخ HTTP بنویسیم.
  • ساختار کد به گونه ای است که صادرات CSV را به طور موثر انجام می دهد و پس از اتمام، دسته فایل را می بندد.

این کد داده ها را از جدول MySQL به عنوان یک فایل CSV صادر می کند و باز کردن و کار با آنها را برای کاربران در برنامه های صفحه گسترده مانند اکسل آسان می کند. فراموش نکنید که اعتبار پایگاه داده را با اعتبار خود جایگزین کنید.

Douglas Karr

Douglas Karr CMO از است OpenINSIGHTS و بنیانگذار Martech Zone. داگلاس به ده‌ها استارت‌آپ موفق MarTech کمک کرده است، به بررسی دقیق بیش از 5 میلیارد دلار در خرید و سرمایه‌گذاری Martech کمک کرده است، و همچنان به شرکت‌ها در پیاده‌سازی و خودکارسازی استراتژی‌های فروش و بازاریابی کمک می‌کند. داگلاس یک متخصص و سخنران تحول دیجیتال و MarTech است. داگلاس همچنین نویسنده کتاب راهنمای Dummie و کتاب رهبری تجاری است.

مقالات مرتبط

بازگشت به دکمه بالا
نزدیک

Adblock شناسایی شد

Martech Zone می تواند این محتوا را بدون هیچ هزینه ای در اختیار شما قرار دهد زیرا ما از طریق درآمد تبلیغاتی، پیوندهای وابسته و حمایت های مالی از سایت خود کسب درآمد می کنیم. اگر در حین مشاهده سایت ما، مسدود کننده تبلیغات خود را حذف کنید، خوشحال خواهیم شد.