Pour le boulot, j’ai dû faire une application qui permettait de télécharger un dump d’une table MySQL.
Ayant déjà fait une application du même genre je comptais reprendre ce code. Je parcourais la table qu’on veut télécharger et j’écrivais moi même les lignes du fichier dump.
La méthode est bonne et marche assez bien mais il y a toujours des petits détails auxquels on ne pense pas (caractères spéciaux dans la table, …) et je me suis donc dit qu’il existait surement une fonction native en SQL qui devait permettre de faire ça. Et en effet, il existe en MySQL des fonctions permettant de dumper une table.
Dump d’une table en fichier CSV :
CSV : Comma-separated values
SELECT * INTO OUTFILE 'dump.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY 'n'
FROM tablename;
Cette requête SQL va dumper la table dans le fichier « dump.csv » (les colonnes seront séparées par « , », les champs texte seront encadrés par le caractère » et les lignes seront terminées par « n » (retour à la ligne UNIX)
Il faut bien sûr remplacer tablename par le nom de la table qu’on souhaiter exporter.
Pour effectuer cette requête en PHP, rien de plus facile, il suffit d’utiliser la fonction mysqli::query().
Dump des requêtes pour créer et remplir une table :
Le seul moyen que j’ai trouvé pour avoir le dump des requêtes pour recréer la table est d’utiliser l’utilitaire mysqldump.
Cet utilitaire doit être utilsé sous DOS (ou avec le Shell).
mysqldump -u login -ppassword -h server --opt database tablename -c > 'dump.sql'
Le fichier « dump.sql » contiendra maintenant la suite de requêtes pour recréer et remplir la table tablename. Vous devez bien sûr remplacer login et password par le login et le mot de passe de connexion au serveur MySQL. database doit être remplacé par le nom de la base de donnée dans laquelle se trouve la table et tablename doit être remplacé par le nom de la table que vous souhaitez dumper.
Mais comment exécuter cette commande en PHP ?
Tout simplement en utilisant la fonction exec().
ATTENTION :
Pour pouvoir utiliser mysqldump, il faut être dans le bon répertoire, sinon la commande ne sera pas reconnue.
Sous DOS ou Shell :
cd "C:Program FilesMySQLMySQL Server 4.1bin"
mysqldump ...
En PHP :
chdir('C:\Program Files\MySQL\MySQL Server 4.1\bin');
exec('mysqldump ...');