CRM და მონაცემთა პლატფორმები

PHP და MySQL: შეკითხვის ექსპორტი ჩანართების გამოყოფილ ან CSV ფაილში

ამ შაბათ-კვირას მინდოდა ავაშენო PHP გვერდი, რომელიც ქმნის ნებისმიერ სარეზერვო ასლს MySQL შეკითხვა ან ცხრილი 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";
    }
  • ჩვენ ვიყენებთ ა 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 არის CMO of OpenINSIGHTS და დამფუძნებელი Martech Zone. დუგლასი დაეხმარა ათეულობით წარმატებულ MarTech სტარტაპს, დაეხმარა 5 მილიარდ დოლარზე მეტის შეძენისა და ინვესტიციების გამომუშავებაში და აგრძელებს კომპანიებს მათი გაყიდვებისა და მარკეტინგული სტრატეგიების განხორციელებაში და ავტომატიზაციაში. დუგლასი არის საერთაშორისოდ აღიარებული ციფრული ტრანსფორმაციის და MarTech ექსპერტი და სპიკერი. დუგლასი ასევე არის Dummie's-ის სახელმძღვანელოს და ბიზნეს ლიდერობის წიგნის გამოქვეყნებული ავტორი.

დაკავშირებული სტატიები

დაბრუნება ღილაკზე
დახურვა

Adblock აღმოჩენილია

Martech Zone შეუძლია მოგაწოდოთ ეს კონტენტი უფასოდ, რადგან ჩვენ ვაკეთებთ ჩვენი საიტის მონეტიზაციას რეკლამის შემოსავლების, შვილობილი ბმულების და სპონსორების მეშვეობით. ჩვენ მადლობელი ვიქნებით, თუ ჩვენს საიტს ნახულობთ თქვენს რეკლამის ბლოკერს.