✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Hur man exporterar MySQL-databasdata till Excel med PHP

34

Nyligen publicerade jag en artikel Hur man läser CSV- och Excel-filer i PHP med hjälp av PhpSpreadsheet och en av läsarna frågade om att exportera MySQL-databasposter till Excel-fil. Användaren kan behöva sin data i Excel- eller CSV-filen så att de enkelt kan läsa eller dela den. I den här artikeln diskuterade vi hur man kan exportera data från en databas till Excel- och CSV-filer. Utöver detta kommer vi också att studera hur man kan skicka den exporterade filen som en bilaga i e-postmeddelandet.

Komma igång

För att komma igång måste du först installera PhpSpreadsheet- biblioteket. Jag rekommenderar att du använder Composer för installation av biblioteket. Öppna terminalen i din projektkatalog och kör kommandot:

composer require phpoffice/phpspreadsheet

PhpSpreadsheet är biblioteket som ger stöd för läsning och skrivning av olika typer av filformat. Nedan visas skärmdumpen av filformat som stöds.

Hur man exporterar MySQL-databasdata till Excel med PHP

Vårt slutmål är att exportera databastabellposter till Excel / CSV-fil. Jag tar tabellen "produkter" som ett exempel. Låt oss skapa en tabell "produkter" i databasen genom att köra frågan nedan.

CREATE TABLE `products` ( `id` int(11) NOT NULL AUTO_INCREMENT,
 `product_name` varchar(255) NOT NULL,
 `product_sku` varchar(255) NOT NULL,
 `product_price` varchar(255) NOT NULL,
 PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Lägg sedan till några dummyposter i tabellen så att du ser några poster i den exporterade filen.

INSERT INTO `products` (`id`, `product_name`, `product_sku`, `product_price`) VALUES
(1, 'Apple', 'app_111', '$1000'),
(2, 'Lenovo', 'len_222', '$999'),
(3, 'Samsung', 'sam_689', '$1200'),
(4, 'Acer', 'ace_620', '$900');

Skapa sedan en db.phpfil där vi skulle skriva databasanslutningen.

db.php

<?php
$db_host = 'DATABASE_HOST';
$db_username = 'DATABASE_USERNAME';
$db_password = 'DATABASE_PASSWORD';
$db_name = 'DATABASE_NAME';
 
$db = new mysqli($db_host, $db_username, $db_password, $db_name);
 
if($db->connect_error){
    die("Unable to connect database: ". $db->connect_error);
}

Se till att ersätta platshållarna med de faktiska värdena i ovanstående kod. I nästa del av handledningen tilldelar jag ett separat avsnitt om att exportera data till Excel, till CSV och skicka e-postmeddelandet med en exporterad fil som en bilaga.

Exportera MySQL-databasdata till Excel med PHP

Du har installerat biblioteket och är redo med en databastabell med dummy-poster. Nu kan du fortsätta och skriva den faktiska koden som exporterar en Excel-fil med data fylld i den.

Skapa en index.phpfil i rotkatalogen. I den här filen skriver jag en SELECT-fråga för att hämta data från databasen, skriva dessa data till Excel och slutligen ladda ner den automatiskt.

index.php

<?php
require_once "vendor/autoload.php";
require_once "db.php";
 
use PhpOfficePhpSpreadsheetSpreadsheet;
use PhpOfficePhpSpreadsheetWriterXlsx;
 
$spreadsheet = new Spreadsheet();
$Excel_writer = new Xlsx($spreadsheet);
 
$spreadsheet->setActiveSheetIndex(0);
$activeSheet = $spreadsheet->getActiveSheet();
 
$activeSheet->setCellValue('A1', 'Product Name');
$activeSheet->setCellValue('B1', 'Product SKU');
$activeSheet->setCellValue('C1', 'Product Price');
 
$query = $db->query("SELECT * FROM products ORDER BY id DESC");
 
if($query->num_rows > 0) {
    $i = 2;
    while($row = $query->fetch_assoc()) {
        $activeSheet->setCellValue('A'.$i, $row['product_name']);
        $activeSheet->setCellValue('B'.$i, $row['product_sku']);
        $activeSheet->setCellValue('C'.$i, $row['product_price']);
        $i++;
    }
}
 
$filename = 'products.xlsx';
 
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename='. $filename);
header('Cache-Control: max-age=0');
$Excel_writer->save('php://output');

När du kör den här PHP-filen i en webbläsare kommer en Excel-fil att ladda ner automatiskt och detta Excel-ark kommer att ha följande utdata.

Hur man exporterar MySQL-databasdata till Excel med PHP

Exportera MySQL-databasdata till CSV med PHP

I föregående avsnitt exporterade vi data till Excel-fil. Om någon vill exportera data i en CSV-fil måste du ändra några rader i ovanstående kod.

csv.php

<?php
require_once "vendor/autoload.php";
require_once "db.php";
 
use PhpOfficePhpSpreadsheetSpreadsheet;
use PhpOfficePhpSpreadsheetWriterCsv;
 
$spreadsheet = new Spreadsheet();
$Excel_writer = new Csv($spreadsheet);
 
$spreadsheet->setActiveSheetIndex(0);
$activeSheet = $spreadsheet->getActiveSheet();
 
$activeSheet->setCellValue('A1', 'Product Name');
$activeSheet->setCellValue('B1', 'Product SKU');
$activeSheet->setCellValue('C1', 'Product Price');
 
$query = $db->query("SELECT * FROM products ORDER BY id DESC");
 
if($query->num_rows > 0) {
    $i = 2;
    while($row = $query->fetch_assoc()) {
        $activeSheet->setCellValue('A'.$i, $row['product_name']);
        $activeSheet->setCellValue('B'.$i, $row['product_sku']);
        $activeSheet->setCellValue('C'.$i, $row['product_price']);
        $i++;
    }
}
 
$filename = 'products.csv';
 
header('Content-Type: application/text-csv');
header('Content-Disposition: attachment;filename='. $filename);
header('Cache-Control: max-age=0');
$Excel_writer->save('php://output');

Skicka ett e-postmeddelande med filen som en bilaga

Hittills i den här artikeln har vi sett hur man laddar ner filen i CSV- och Excel-format. Vissa användare kanske vill skicka den exporterade filen som en bilaga i e-postmeddelandet. Låt oss se hur man uppnår det.

Installera först PHPMailer- biblioteket med kommandot:

composer require phpmailer/phpmailer

När du har installerat biblioteket kan du använda vilken SMTP-server som helst för att skicka ett e-postmeddelande. Det är upp till dig. Du kan använda din värdbaserade SMTP-server, AWS SES eller Gmail SMTP-server. Om du går med Gmail SMTP-servern läs vår artikel Skicka e-post med Gmail SMTP-server från PHP-skript som förklarar konfigurationen som behövs för den.

Koden skrivs ned tidigare och laddar ner filen automatiskt. Men nu, istället för att göra den nedladdningsbar, kommer vi att spara filen i katalogen och sedan skicka den som en bilaga. Kort sagt, vi kommer att ha koden nedan för att spara filen.

...
$filename = 'products.csv';
 
if (!file_exists('files')) {
    mkdir('files', 0755);
}
$Excel_writer->save('files/'.$filename);

Vår sista kod för att skicka bilagor i ett e-postmeddelande kommer att vara följande:

<?php
require_once "vendor/autoload.php";
require_once "db.php";
 
use PhpOfficePhpSpreadsheetSpreadsheet;
use PhpOfficePhpSpreadsheetWriterCsv;
 
//Import PHPMailer classes into the global namespace
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
 
$spreadsheet = new Spreadsheet();
$Excel_writer = new Csv($spreadsheet);
 
$spreadsheet->setActiveSheetIndex(0);
$activeSheet = $spreadsheet->getActiveSheet();
 
$activeSheet->setCellValue('A1', 'Product Name');
$activeSheet->setCellValue('B1', 'Product SKU');
$activeSheet->setCellValue('C1', 'Product Price');
 
$query = $db->query("SELECT * FROM products ORDER BY id DESC");
 
if($query->num_rows > 0) {
    $i = 2;
    while($row = $query->fetch_assoc()) {
        $activeSheet->setCellValue('A'.$i, $row['product_name']);
        $activeSheet->setCellValue('B'.$i, $row['product_sku']);
        $activeSheet->setCellValue('C'.$i, $row['product_price']);
        $i++;
    }
}
 
$filename = 'products.csv';
 
if (!file_exists('files')) {
    mkdir('files', 0755);
}
$Excel_writer->save('files/'.$filename);
 
// send as an attachment
$mail = new PHPMailer(true);
try {
    $mail->isSMTP();
    $mail->Host = 'SMTP_HOST';
    $mail->SMTPAuth = true;
    $mail->Username = 'SMTP_USERNAME';   //username
    $mail->Password = 'SMTP_PASSWORD';   //password
    $mail->SMTPSecure = 'ssl';
    $mail->Port = 465;
 
    $mail->setFrom('FROM_EMAIL_ADDRESS', 'FROM_NAME');
    $mail->addAddress('RECEPIENT_EMAIL_ADDRESS', 'RECEPIENT_NAME');
  
    $mail->addAttachment('files/'.$filename);
  
    $mail->isHTML(true);
    $mail->Subject = 'Our Exported File';
    $mail->Body    = 'Our Exported File';
  
    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo 'Message could not be sent. Mailer Error: '. $mail->ErrorInfo;
}

Ersätt platshållarna med de faktiska värdena och e-postmeddelandet skickas med en bilaga till mottagarens e-postadress.

Jag hoppas att du förstår hur du exporterar MySQL-databasposter till Excel- eller CSV-filen och även skickar den som en bilaga. Dela dina tankar och förslag i kommentarsektionen nedan.

relaterade artiklar

Inspelningskälla: artisansweb.net

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer