Skip to content

Instantly share code, notes, and snippets.

@apocratus
Created April 22, 2011 10:10
Show Gist options
  • Star 36 You must be signed in to star a gist
  • Fork 31 You must be signed in to fork a gist
  • Save apocratus/936404 to your computer and use it in GitHub Desktop.
Save apocratus/936404 to your computer and use it in GitHub Desktop.
Export MySQL to CSV (php script)
<?php
/* vars for export */
// database record to be exported
$db_record = 'XXXXXXXXX';
// optional where query
$where = 'WHERE 1 ORDER BY 1';
// filename for export
$csv_filename = 'db_export_'.$db_record.'_'.date('Y-m-d').'.csv';
// database variables
$hostname = "localhost";
$user = "XXXXXXXXX";
$password = "XXXXXXXXX";
$database = "XXXXXXXXX";
// Database connecten voor alle services
mysql_connect($hostname, $user, $password)
or die('Could not connect: ' . mysql_error());
mysql_select_db($database)
or die ('Could not select database ' . mysql_error());
// create empty variable to be filled with export data
$csv_export = '';
// query to get data from database
$query = mysql_query("SELECT * FROM ".$db_record." ".$where);
$field = mysql_num_fields($query);
// create line with field names
for($i = 0; $i < $field; $i++) {
$csv_export.= mysql_field_name($query,$i).';';
}
// newline (seems to work both on Linux & Windows servers)
$csv_export.= '
';
// loop through database query and fill export variable
while($row = mysql_fetch_array($query)) {
// create line with field values
for($i = 0; $i < $field; $i++) {
$csv_export.= '"'.$row[mysql_field_name($query,$i)].'";';
}
$csv_export.= '
';
}
// Export the data and prompt a csv file for download
header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename=".$csv_filename."");
echo($csv_export);
?>
@Toomean
Copy link

Toomean commented Mar 14, 2014

Thanks for that)

@sidecarken
Copy link

What goes here?
$db_record = 'XXXXXXXXX';

I put first_name but I don't know if that is correct?

@apocratus
Copy link
Author

@sidecarken: That's where the table name is supposed to go, so probably something along the lines of "users" in your case.

@tareksmoubarak
Copy link

it downloads all the webpage

@pvdptje
Copy link

pvdptje commented Jun 27, 2016

SELECT order_id,product_name,qty
FROM orders
WHERE foo = 'bar'
INTO OUTFILE '/tmp/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

Same effect, no PHP needed :)

@velicuicristian
Copy link

Hello.

I need to put the php code to generate csv from mysql and save in a directory like /public_html

How can i do this ?

Thx

@sanjayrnath
Copy link

You are using all deprecated functions. Please update according to today's standards !

@paulchabotca
Copy link

@pvdptje comment about using the simple SQL statement is great, but will probably only work on a dev box as you will probably have the --secure-file-priv option (and should have) turned on in production. So that wont work, this script will however.

@janschoepke
Copy link

@sanjayrnath: A PHP7-ready version can be found here, as nearly all of the mysql functions used above will be outdated in PHP7:

https://gist.github.com/janschoepke/3e7a3639546d0d740c023e11289cf13d

@nawissor
Copy link

Brilliant! Thank you so much. Works like a charm and exactly what I needed!

@domino4evers
Copy link

What if i don't whan't to download it, but save it on the server?

@C-Abner
Copy link

C-Abner commented May 29, 2018

tyfs
very helpful.

@ivink3aray
Copy link

hi, script it's works but how to determine path url for export result

@LorenzNickel
Copy link

mysql_connect() is no longer supported in php7

@Kyaw-Swar-Linn-Mg
Copy link

shell_exec("export LC_ALL=en_US.UTF-8\nexport LANG=en_US.UTF-8\n/Applications/MAMP/Library/bin/mysql -uroot -proot mahar -e '".$query."'| tr '\t' ',' > ".$file);

@MogagaP
Copy link

MogagaP commented Jul 4, 2019

Hola buenas tardes.
Espero que podáis ayudarme.
Me gustaría poder exportar a csv los datos de una tabla que se muestra según el usuario logado. Tengo el siguiente código, pero hay algo que no hace. El csv se descarga con el nombre del archivo, pero sin datos.

Podéis ayudarme por favor?

@Engerwald
Copy link

I created an account just to say thank you! You saved the day :)
The script works perfectly.

@Robin87119
Copy link

Robin87119 commented Mar 1, 2020

Thx, Very helpful.

@batyna
Copy link

batyna commented Mar 28, 2020

Hi, I really liked your code, but when running it on the server, it outputs the table contents to the page. Logically, it should download a file in csv format. Can you tell me what the problem is?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment