Exporting MySQL table data to a CSV file is a common need in web development. It provides the flexibility of converting your database records into an easily readable and shareable format.
Whether you want to generate reports, transfer data to another system, or create backups, knowing how to export MySQL data to CSV using PHP can be incredibly useful.
This article guides you through the process of exporting MySQL table data as a CSV file using PHP.

Table of Content
- Create a Table
- Establishing a Database Connection
- Display MySQL table data and Enable CSV export
- PHP: Exporting Data to CSV File
- Demo
- Conclusion
1. Create a Table
I am using users table in the example.
CREATE TABLE `users` ( `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, `username` varchar(80) NOT NULL, `name` varchar(50) NOT NULL, `gender` varchar(10) NOT NULL, `email` varchar(70) NOT NULL );
2. Establishing a Database Connection
Create a new config.php to define database connection.
<?php
$host = "localhost"; /* Host name */
$user = "root"; /* User */
$password = ""; /* Password */
$dbname = "tutorial"; /* Database name */
$con = mysqli_connect($host, $user, $password,$dbname);
// Check connection
if (!$con) {
die("Connection failed: " . mysqli_connect_error());
}
3. Display MySQL table data and Enable CSV export
Write code to display users table data in tabular format on the frontend and allows users to export the data as a CSV file.
- Creates a form with a submit button. Set
<form >actionattribute to"download.php". - Inside the form, a table structure is defined with column headers for ID, Username, Name, Gender, and Email.
- Retrieve the
userstable data using a SELECT query and stores it in the$resultvariable. - Loop on the
$result. The values from each row are assigned to variables ($id, $uname, $name, $gender, $email) and stored in an array ($user_arr). - Within the loop, the table rows are dynamically generated using
echostatements to display the retrieved data in the respective table cells. - The
$user_arrarray is serialized using theserialize()function and stored in a hidden textarea namedexport_data. This serialized data will be used for exporting to CSV format. - Upon form submission, the serialized data in the textarea is sent to the
download.phpfile for further processing, which is responsible for generating and delivering the CSV file.
<?php
include "config.php";
?>
<div class="container">
<form method='post' action='download.php'>
<input type='submit' value='Export' name='Export'>
<table border='1' style='border-collapse:collapse;'>
<tr>
<th>ID</th>
<th>Username</th>
<th>Name</th>
<th>Gender</th>
<th>Email</th>
</tr>
<?php
$query = "SELECT * FROM users ORDER BY id asc";
$result = mysqli_query($con,$query);
$user_arr = array();
while($row = mysqli_fetch_array($result)){
$id = $row['id'];
$uname = $row['username'];
$name = $row['name'];
$gender = $row['gender'];
$email = $row['email'];
$user_arr[] = array($id,$uname,$name,$gender,$email);
?>
<tr>
<td><?php echo $id; ?></td>
<td><?php echo $uname; ?></td>
<td><?php echo $name; ?></td>
<td><?php echo $gender; ?></td>
<td><?php echo $email; ?></td>
</tr>
<?php
}
?>
</table>
<?php
$serialize_user_arr = serialize($user_arr);
?>
<textarea name='export_data' style='display: none;'><?php echo $serialize_user_arr; ?></textarea>
</form>
</div>
4. PHP: Exporting Data to CSV File
Create a download.php file for CSV export.
1. File and Data Preparation:
- Define a filename for the CSV file as “users.csv”.
- The serialized data from the textarea, received via the
$_POSTasexport_data, is unserialized using theunserialize()function and stored in the$export_datavariable.
2. File Creation and CSV Writing:
- A file with the specified filename is created using the
fopen()function with the “w” mode, allowing writing to the file. - Using foreach loop iterate over the unserialized data array, and each line of data is written to the CSV file using the
fputcsv()function. - Once all data is written, the file is closed using
fclose().
3. Downloading the CSV File:
- Headers are set to specify the file transfer and instruct the browser to treat the file as an attachment with the provided filename.
- Set Content-Type header to “application/csv”.
- The contents of the CSV file are read using the
readfile()function, which outputs the file content for download.
4. Cleanup:
After the file has been downloaded, the file is deleted using the unlink() function to remove it from the server.
5. Exiting the Script:
The exit() function is called to terminate the script execution after the file has been downloaded and deleted, preventing any further processing.
<?php
$filename = 'users.csv';
$export_data = unserialize($_POST['export_data']);
// file creation
$file = fopen($filename,"w");
foreach ($export_data as $line){
fputcsv($file,$line);
}
fclose($file);
// download
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=".$filename);
header("Content-Type: application/csv; ");
readfile($filename);
// deleting file
unlink($filename);
exit();
5. Demo
6. Conclusion
The code we talked about helps you export data from a MySQL table as a CSV file using PHP. It’s simple: the code puts the data into a file using an array and the fputcsv() function.
This is useful for your PHP web applications. You can make CSV files for reports, analyze data, share info with other systems, and work with others.
Remember to change the code for your needs. Give files the right names and think about security for sensitive data.
If you’re interested in learning how to import CSV file data into a MySQL database table using PHP, you can refer to this tutorial.
If you found this tutorial helpful then don't forget to share.