در این آموزش php قصد داریم به شما نحوه دریافت خروجی (export) از دیتابیس Mysql را در فایل CSV نشان بدیم. قبلا آموزش نحوه خواندن فایل CSV در PHP را دیدیم.
بعد از اتصال به دیتابیس, نیاز است که رکوردهای جدول mysql را واکشی (fetch
) کنیم. این نتایج دیتابیس باید در فرمت رشته ای CSV به همراه جداکننده های مناسب باشند.
و بعد, نیاز داریم این فایل CSV را با ارسال هدر به مرورگر دانلود کنیم.
مثال: دریافت خروجی CSV با PHP از دیتابیس
در این مثال, ما یک جدول MySQL به نام toy
داریم. که نام فیلدهای جدول را خوانده و آن ها را به بخش هدینگ فایل CSV اضافه می کنیم.
سپس در یک حلقه تکرار سطرهای جدول را خوانده و داخل یک رشته با فرمت صحیح CSV قرار می دهیم.
بعد از آن برای ارسال فایل به منظور دانلود, هدر Content-Type
, Disposition
و همچنین نام فایل با پسوند .csv برای ذخیره رشته ایجاد شده, ست و به مرورگر برای دانلود ارسال می کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php $conn = mysqli_connect("localhost","root","test", "netparadis_ex"); $query = "SELECT * FROM toy"; $result = mysqli_query($conn, $query); $num_column = mysqli_num_fields($result); $csv_header = ''; for($i=0;$i<$num_column;$i++) { $csv_header .= '"' . mysqli_fetch_field_direct($result,$i)->name . '",'; } $csv_header .= "\n"; $csv_row =''; while($row = mysqli_fetch_row($result)) { for($i=0;$i<$num_column;$i++) { $csv_row .= '"' . $row[$i] . '",'; } $csv_row .= "\n"; } /* Download as CSV File */ header('Content-type: application/csv'); header('Content-Disposition: attachment; filename=toy_csv.csv'); echo $csv_header . $csv_row; exit; ?> |
اول بلاک <?php
را مشخص کردیم تا نوع زبان کدهای اسکریپتی ما مشخص شود.
در خط بعد با تابع mysqli_connect
به دیتابیس با اطلاعاتی که به عنوان آرگومان تعیین شده است متصل می شویم. (آموزش اتصال به دیتابیس با MySQLi)
بعد یک کویری SELECT
برای دریافت تمام سطرهای جدول toy
نوشتیم و با تابع mysqli_query
آنرا اجرا کردیم.
سپس تعداد ستون های سطر بازگشتی را دریافت و در یک حلقه for
به منظور دریافت نام ستون ها و قرار دادن آن به عنوان هدر فایل CSV استفاده کردیم.
در مرحله بعد از تابع mysqli_fetch_row
برای دریافت مقادیر داخل سطرها بهره بردیم.
بعد اینکه رشته های ما برای دریافت خروجی CSV ساخته شد, هدرهای دانلود فایل به همراه نام فایل فرضی را تعیین و رشته های را چاپ می کنیم. (دانلود فایل با PHP)
نکته: توجه کنید که قبل از چاپ رشته های ایجاد شده (خط۲۶ ) نباید هیچ کاراکتری چاپ یا در هدر ارسال شده باشد چرا که احتمال corrupt یا خراب شدن فایل خروجی وجود دارد و با خطای header already sent.. مواجه می شود (انواع خطاها در php)
برای رفع این مشکل هم می توانید تمام خروجی بافر را قبل از چاپ کردن با تابع ob_end_clean()
حذف کنید. (آموزش output buffering در PHP)
امیدوارم از آموزش دریافت خروجی CSV با PHP از دیتابیس MySQL نهایت استفاده را برده باشید.
برای دانلود سورس کد و دیتابیس از باکس دانلود زیر استفاده کنید.
هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید.
خطای سیتنکس دارید و اینکه خروجی با فارسی سازگار نیست
سلام. خطای سینتکسی وجود ندارد چرا که شما برای کپی کدها باید روی کد دابل کلیک کنید کنید تا وارد محیط سفید رنگ بشید و کپی کنید و در این حالت نمایشی ۰ در حلقه نمایش و قابل کپی نیست.
charset یا کانکشن اتصال به دیتابیس را باید روی utf8 بزارید تا مشکل خروجی شما حل بشه و ارتباطی که کد تبدیل به csv ندارد.
موفق باشید.