{"id":28397,"date":"2021-05-25T11:10:00","date_gmt":"2021-05-25T08:10:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28397"},"modified":"2021-10-18T03:42:10","modified_gmt":"2021-10-18T00:42:10","slug":"jak-wyeksportowac-dane-bazy-danych-mysql-do-programu-excel-za-pomoca-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/jak-wyeksportowac-dane-bazy-danych-mysql-do-programu-excel-za-pomoca-php\/","title":{"rendered":"Jak wyeksportowa\u0107 dane bazy danych MySQL do programu Excel za pomoc\u0105 PHP"},"content":{"rendered":"<p>Niedawno opublikowa\u0142em artyku\u0142 <a href=\"https:\/\/themewp.inform.click\/pl\/jak-czytac-plik-csv-i-excel-w-php-za-pomoca-arkusza-php\/\" title=\"Jak czyta\u0107 plik CSV i Excel w PHP za pomoc\u0105 arkusza PhpSpreadsheet\" >Jak czyta\u0107 plik CSV i Excel w PHP za pomoc\u0105 arkusza PhpSpreadsheet<\/a> i jeden z czytelnik\u00f3w zapyta\u0142 o eksport rekord\u00f3w bazy danych MySQL do pliku Excel. U\u017cytkownik mo\u017ce potrzebowa\u0107 swoich danych w pliku Excel lub CSV, aby m\u00f3c je \u0142atwo czyta\u0107 lub udost\u0119pnia\u0107. W tym artykule om\u00f3wili\u015bmy, w jaki spos\u00f3b mo\u017cna eksportowa\u0107 dane z bazy danych do plik\u00f3w Excel i CSV. Opr\u00f3cz tego przeanalizujemy r\u00f3wnie\u017c, w jaki spos\u00f3b mo\u017cna wys\u0142a\u0107 ten wyeksportowany plik jako za\u0142\u0105cznik do wiadomo\u015bci e-mail.<\/p>\n<h3>Pierwsze kroki<\/h3>\n<p>Aby rozpocz\u0105\u0107, musisz najpierw zainstalowa\u0107 bibliotek\u0119 <a href=\"https:\/\/phpspreadsheet.readthedocs.io\/en\/latest\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PhpSpreadsheet<\/a>. Do instalacji biblioteki polecam u\u017cywa\u0107 <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composera<\/a>. Otw\u00f3rz terminal w katalogu g\u0142\u00f3wnym projektu i uruchom polecenie:<\/p>\n<pre><code>composer require phpoffice\/phpspreadsheet<\/code><\/pre>\n<p>PhpSpreadsheet to biblioteka, kt\u00f3ra zapewnia obs\u0142ug\u0119 odczytu i zapisu r\u00f3\u017cnych typ\u00f3w format\u00f3w plik\u00f3w. Poni\u017cej znajduje si\u0119 zrzut ekranu obs\u0142ugiwanych format\u00f3w plik\u00f3w.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20480-6081f88658855.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20480-6081f88658855.png\" alt=\"Jak wyeksportowa\u0107 dane bazy danych MySQL do programu Excel za pomoc\u0105 PHP\" ><\/a><\/p>\n<p>Naszym celem ko\u0144cowym jest wyeksportowanie rekord\u00f3w tabeli bazy danych do pliku Excel\/CSV. Jako przyk\u0142ad bior\u0119 tabel\u0119 \u201eprodukty&quot;. Utw\u00f3rzmy tabel\u0119 \u201eproducts&#8221; w bazie danych, uruchamiaj\u0105c poni\u017csze zapytanie.<\/p>\n<pre><code>CREATE TABLE `products` (\u00a0`id` int(11) NOT NULL AUTO_INCREMENT,\n\u00a0`product_name` varchar(255) NOT NULL,\n\u00a0`product_sku` varchar(255) NOT NULL,\n\u00a0`product_price` varchar(255) NOT NULL,\n\u00a0PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;<\/code><\/pre>\n<p>Nast\u0119pnie dodaj kilka fikcyjnych wpis\u00f3w w tabeli, aby zobaczy\u0107 kilka rekord\u00f3w w wyeksportowanym pliku.<\/p>\n<pre><code>INSERT INTO `products` (`id`, `product_name`, `product_sku`, `product_price`) VALUES\n(1, 'Apple', 'app_111', '$1000'),\n(2, 'Lenovo', 'len_222', '$999'),\n(3, 'Samsung', 'sam_689', '$1200'),\n(4, 'Acer', 'ace_620', '$900');<\/code><\/pre>\n<p>Nast\u0119pnie utw\u00f3rz <code>db.php<\/code>plik, w kt\u00f3rym zapiszemy po\u0142\u0105czenie z baz\u0105 danych.<\/p>\n<p><strong>db.php<\/strong><\/p>\n<pre><code>&lt;?php\n$db_host = 'DATABASE_HOST';\n$db_username = 'DATABASE_USERNAME';\n$db_password = 'DATABASE_PASSWORD';\n$db_name = 'DATABASE_NAME';\n\u00a0\n$db = new mysqli($db_host, $db_username, $db_password, $db_name);\n\u00a0\nif($db-&gt;connect_error){\n\u00a0\u00a0\u00a0\u00a0die(\"Unable to connect database: \". $db-&gt;connect_error);\n}<\/code><\/pre>\n<p>Pami\u0119taj, aby zast\u0105pi\u0107 symbole zast\u0119pcze rzeczywistymi warto\u015bciami w powy\u017cszym kodzie. W dalszej cz\u0119\u015bci tutoriala przeznaczam osobn\u0105 sekcj\u0119 dotycz\u0105c\u0105 eksportu danych do Excela, do CSV oraz wysy\u0142ania maila z wyeksportowanym plikiem jako za\u0142\u0105cznikiem.<\/p>\n<h3>Eksportuj dane bazy danych MySQL do Excela za pomoc\u0105 PHP<\/h3>\n<p>Zainstalowa\u0142e\u015b bibliotek\u0119 i jeste\u015b gotowy z tabel\u0105 bazy danych z fikcyjnymi wpisami. Teraz mo\u017cesz i\u015b\u0107 dalej i napisa\u0107 rzeczywisty kod, kt\u00f3ry wyeksportuje plik Excela z wype\u0142nionymi danymi.<\/p>\n<p>Utw\u00f3rz <code>index.php<\/code>plik w katalogu g\u0142\u00f3wnym. W tym pliku napisz\u0119 zapytanie SELECT, aby pobra\u0107 dane z bazy danych, zapisa\u0107 te dane do Excela i na koniec sprawi\u0107, \u017ce zostan\u0105 one automatycznie pobrane.<\/p>\n<p><strong>index.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\nrequire_once \"db.php\";\n\u00a0\nuse PhpOfficePhpSpreadsheetSpreadsheet;\nuse PhpOfficePhpSpreadsheetWriterXlsx;\n\u00a0\n$spreadsheet = new Spreadsheet();\n$Excel_writer = new Xlsx($spreadsheet);\n\u00a0\n$spreadsheet-&gt;setActiveSheetIndex(0);\n$activeSheet = $spreadsheet-&gt;getActiveSheet();\n\u00a0\n$activeSheet-&gt;setCellValue('A1', 'Product Name');\n$activeSheet-&gt;setCellValue('B1', 'Product SKU');\n$activeSheet-&gt;setCellValue('C1', 'Product Price');\n\u00a0\n$query = $db-&gt;query(\"SELECT * FROM products ORDER BY id DESC\");\n\u00a0\nif($query-&gt;num_rows &gt; 0) {\n\u00a0\u00a0\u00a0\u00a0$i = 2;\n\u00a0\u00a0\u00a0\u00a0while($row = $query-&gt;fetch_assoc()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('A'.$i, $row['product_name']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('B'.$i, $row['product_sku']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('C'.$i, $row['product_price']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$i++;\n\u00a0\u00a0\u00a0\u00a0}\n}\n\u00a0\n$filename = 'products.xlsx';\n\u00a0\nheader('Content-Type: application\/vnd.ms-excel');\nheader('Content-Disposition: attachment;filename='. $filename);\nheader('Cache-Control: max-age=0');\n$Excel_writer-&gt;save('php:\/\/output');<\/code><\/pre>\n<p>Po uruchomieniu tego pliku PHP w przegl\u0105darce automatycznie rozpocznie si\u0119 pobieranie pliku Excel, a ten arkusz Excela b\u0119dzie zawiera\u0142 nast\u0119puj\u0105ce dane wyj\u015bciowe.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20480-6081f88658855.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20480-6081f88658855.png\" alt=\"Jak wyeksportowa\u0107 dane bazy danych MySQL do programu Excel za pomoc\u0105 PHP\" ><\/a><\/p>\n<h3>Eksportuj dane bazy danych MySQL do CSV za pomoc\u0105 PHP<\/h3>\n<p>W poprzedniej sekcji wyeksportowali\u015bmy dane do pliku Excel. Je\u015bli kto\u015b chce wyeksportowa\u0107 dane w pliku CSV, to trzeba zmieni\u0107 kilka linijek w powy\u017cszym kodzie.<\/p>\n<p><strong>csv.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\nrequire_once \"db.php\";\n\u00a0\nuse PhpOfficePhpSpreadsheetSpreadsheet;\nuse PhpOfficePhpSpreadsheetWriterCsv;\n\u00a0\n$spreadsheet = new Spreadsheet();\n$Excel_writer = new Csv($spreadsheet);\n\u00a0\n$spreadsheet-&gt;setActiveSheetIndex(0);\n$activeSheet = $spreadsheet-&gt;getActiveSheet();\n\u00a0\n$activeSheet-&gt;setCellValue('A1', 'Product Name');\n$activeSheet-&gt;setCellValue('B1', 'Product SKU');\n$activeSheet-&gt;setCellValue('C1', 'Product Price');\n\u00a0\n$query = $db-&gt;query(\"SELECT * FROM products ORDER BY id DESC\");\n\u00a0\nif($query-&gt;num_rows &gt; 0) {\n\u00a0\u00a0\u00a0\u00a0$i = 2;\n\u00a0\u00a0\u00a0\u00a0while($row = $query-&gt;fetch_assoc()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('A'.$i, $row['product_name']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('B'.$i, $row['product_sku']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('C'.$i, $row['product_price']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$i++;\n\u00a0\u00a0\u00a0\u00a0}\n}\n\u00a0\n$filename = 'products.csv';\n\u00a0\nheader('Content-Type: application\/text-csv');\nheader('Content-Disposition: attachment;filename='. $filename);\nheader('Cache-Control: max-age=0');\n$Excel_writer-&gt;save('php:\/\/output');<\/code><\/pre>\n<h3>Wy\u015blij e-mail z plikiem jako za\u0142\u0105cznikiem<\/h3>\n<p>Do tej pory w tym artykule widzieli\u015bmy, jak pobra\u0107 plik w formacie CSV i Excel. Niekt\u00f3rzy u\u017cytkownicy mog\u0105 chcie\u0107 wys\u0142a\u0107 wyeksportowany plik jako za\u0142\u0105cznik do wiadomo\u015bci e-mail. Zobaczmy, jak to osi\u0105gn\u0105\u0107.<\/p>\n<p>Najpierw zainstaluj bibliotek\u0119 <a href=\"https:\/\/github.com\/PHPMailer\/PHPMailer\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPMailer<\/a> za pomoc\u0105 polecenia:<\/p>\n<pre><code>composer require phpmailer\/phpmailer<\/code><\/pre>\n<p>Po zainstalowaniu biblioteki mo\u017cesz u\u017cy\u0107 dowolnego serwera SMTP do wys\u0142ania wiadomo\u015bci e-mail. To zale\u017cy od Ciebie. Mo\u017cesz u\u017cy\u0107 serwera SMTP, AWS SES lub serwera SMTP Gmaila. Je\u015bli wybierasz si\u0119 z serwerem Gmail SMTP, przeczytaj nasz artyku\u0142 <a href=\"https:\/\/themewp.inform.click\/pl\/wyslij-e-mail-za-pomoca-serwera-smtp-gmaila-ze-skryptu-php\/\" title=\"Wysy\u0142anie wiadomo\u015bci e-mail za pomoc\u0105 serwera SMTP Gmail z PHP Script,\">Wysy\u0142anie wiadomo\u015bci e-mail za pomoc\u0105 serwera SMTP Gmail z PHP Script,<\/a> kt\u00f3ry wyja\u015bnia potrzebn\u0105 konfiguracj\u0119.<\/p>\n<p>Kod napisany wcze\u015bniej pobiera plik automatycznie. Ale teraz, zamiast udost\u0119pnia\u0107 go do pobrania, zapiszemy plik w katalogu, a nast\u0119pnie wy\u015blemy go jako za\u0142\u0105cznik. W skr\u00f3cie, poni\u017cej b\u0119dziemy mieli kod do zapisania pliku.<\/p>\n<pre><code>...\n$filename = 'products.csv';\n\u00a0\nif (!file_exists('files')) {\n\u00a0\u00a0\u00a0\u00a0mkdir('files', 0755);\n}\n$Excel_writer-&gt;save('files\/'.$filename);<\/code><\/pre>\n<p>Nasz ostateczny kod do wys\u0142ania za\u0142\u0105cznika w wiadomo\u015bci e-mail b\u0119dzie wygl\u0105da\u0142 nast\u0119puj\u0105co:<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\nrequire_once \"db.php\";\n\u00a0\nuse PhpOfficePhpSpreadsheetSpreadsheet;\nuse PhpOfficePhpSpreadsheetWriterCsv;\n\u00a0\n\/\/Import PHPMailer classes into the global namespace\nuse PHPMailerPHPMailerPHPMailer;\nuse PHPMailerPHPMailerException;\n\u00a0\n$spreadsheet = new Spreadsheet();\n$Excel_writer = new Csv($spreadsheet);\n\u00a0\n$spreadsheet-&gt;setActiveSheetIndex(0);\n$activeSheet = $spreadsheet-&gt;getActiveSheet();\n\u00a0\n$activeSheet-&gt;setCellValue('A1', 'Product Name');\n$activeSheet-&gt;setCellValue('B1', 'Product SKU');\n$activeSheet-&gt;setCellValue('C1', 'Product Price');\n\u00a0\n$query = $db-&gt;query(\"SELECT * FROM products ORDER BY id DESC\");\n\u00a0\nif($query-&gt;num_rows &gt; 0) {\n\u00a0\u00a0\u00a0\u00a0$i = 2;\n\u00a0\u00a0\u00a0\u00a0while($row = $query-&gt;fetch_assoc()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('A'.$i, $row['product_name']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('B'.$i, $row['product_sku']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('C'.$i, $row['product_price']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$i++;\n\u00a0\u00a0\u00a0\u00a0}\n}\n\u00a0\n$filename = 'products.csv';\n\u00a0\nif (!file_exists('files')) {\n\u00a0\u00a0\u00a0\u00a0mkdir('files', 0755);\n}\n$Excel_writer-&gt;save('files\/'.$filename);\n\u00a0\n\/\/ send as an attachment\n$mail = new PHPMailer(true);\ntry {\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;isSMTP();\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Host = 'SMTP_HOST';\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;SMTPAuth = true;\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Username = 'SMTP_USERNAME';\u00a0\u00a0 \/\/username\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Password = 'SMTP_PASSWORD';\u00a0\u00a0 \/\/password\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;SMTPSecure = 'ssl';\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Port = 465;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;setFrom('FROM_EMAIL_ADDRESS', 'FROM_NAME');\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;addAddress('RECEPIENT_EMAIL_ADDRESS', 'RECEPIENT_NAME');\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;addAttachment('files\/'.$filename);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;isHTML(true);\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Subject = 'Our Exported File';\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Body\u00a0\u00a0\u00a0 = 'Our Exported File';\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;send();\n\u00a0\u00a0\u00a0\u00a0echo 'Message has been sent';\n} catch (Exception $e) {\n\u00a0\u00a0\u00a0\u00a0echo 'Message could not be sent. Mailer Error: '. $mail-&gt;ErrorInfo;\n}<\/code><\/pre>\n<p>Zast\u0105p symbole zast\u0119pcze rzeczywistymi warto\u015bciami, a wiadomo\u015b\u0107 e-mail zostanie wys\u0142ana z za\u0142\u0105cznikiem na adres e-mail odbiorcy.<\/p>\n<p>Mam nadziej\u0119, \u017ce rozumiesz, jak wyeksportowa\u0107 rekordy bazy danych MySQL do pliku Excel lub CSV, a tak\u017ce wys\u0142a\u0107 go jako za\u0142\u0105cznik. Podziel si\u0119 swoimi przemy\u015bleniami i sugestiami w sekcji komentarzy poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-przesylac-pliki-na-zdalny-serwer-w-php\/\" title=\"Jak przesy\u0142a\u0107 pliki na zdalny serwer w PHP\">Jak przesy\u0142a\u0107 pliki na zdalny serwer w PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/wyslij-e-mail-za-pomoca-mailjet-alternatywa-dla-serwera-smtp-gmail-w-php\/\" title=\"Wy\u015blij e-mail za pomoc\u0105 Mailjet (alternatywa dla serwera SMTP Gmail) w PHP\">Wy\u015blij e-mail za pomoc\u0105 Mailjet (alternatywa dla serwera SMTP Gmail) w PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-przekonwertowac-html-na-pdf-w-php\/\" title=\"Jak przekonwertowa\u0107 HTML na PDF w PHP\">Jak przekonwertowa\u0107 HTML na PDF w PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Czy chcesz wyeksportowa\u0107 dane bazy danych MySQL do Excela za pomoc\u0105 PHP? W tym artykule pokazujemy, jak \u0142atwo mo\u017cna wyeksportowa\u0107 dane do pliku Excel z minimalnym kodem<\/p>\n","protected":false},"author":1,"featured_media":21909,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[277],"tags":[847],"class_list":["post-28397","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-8","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28397","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=28397"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28397\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/21909"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=28397"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=28397"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=28397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}