Created
May 17, 2013 12:50
-
-
Save prbaron/5598824 to your computer and use it in GitHub Desktop.
Export Database into a SQL file with CakePHP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php echo $this->Form->postButton("Exporter", array('action' => 'export'), array('class' => 'btn btn-primary')); ?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class Setting extends AppModel { | |
public $useTable = false; | |
/** | |
* Exporte la base de donnees dans un format .sql | |
* un fichier est cree dans App/webroot/files/sql_dump | |
* un autre fichier est telecharge dans par le navigateur | |
* | |
* @access public | |
* @return string|null le nom de la base, null si erreur | |
*/ | |
public function exportDatabase() { | |
/** | |
* Recupere la configuration de la base de donnees | |
*/ | |
App::uses('ConnectionManager', 'Model'); | |
$dataSource = ConnectionManager::getDataSource('default'); | |
$database = $dataSource->config['database']; | |
// commentaires sql de l'en-tete | |
$content = "--\n"; | |
$content .= "-- Pierre Baron \n"; | |
$content .= "-- export de la base `".$database."` au ".date("d-m-Y")."\n"; | |
$content .= "--\n\n\n"; | |
// commentaires sql | |
$content .= "-- -----------------------------\n"; | |
$content .= "-- creation de la base `".$database."`\n"; | |
$content .= "-- -----------------------------\n"; | |
$content .= "CREATE DATABASE `" .$database. "` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;\n"; | |
$content .= "USE `" + $database +"`;\n\n"; | |
$content .= "-- --------------------------------------------------------\n\n"; | |
$tables = $this->query('show tables'); | |
foreach($tables as $k => $v){ | |
foreach($v['TABLE_NAMES'] as $table) { | |
// commentaires sql | |
$content .= "--\n"; | |
$content .= "-- Structure de la table `".$table."`\n"; | |
$content .= "--\n"; | |
$structures = $this->query("show create table `".$table."`"); | |
foreach($structures as $s) { | |
$content .= $s[0]['Create Table'].";\n\n"; | |
$content .= "--\n"; | |
$content .= "-- entrees dans la table `".$table."`\n"; | |
$content .= "--\n"; | |
$entries = $this->query("SELECT * FROM `".$table."`"); | |
foreach($entries as $entry) { | |
$content .= "INSERT INTO ".$table." ("; | |
/** | |
* on entre tous les champs a remplir | |
* ce sont les cles du tableau $e[$table] | |
*/ | |
$i = 0; | |
foreach($entry[$table] as $entryKey => $vv) { | |
$entryKey = addslashes($entryKey); | |
$content .= "`".$entryKey."`"; | |
$i++; | |
if($i < count($entry[$table])) | |
$content .=", "; | |
} | |
$content .= ") VALUES ("; | |
/** | |
* on entre toutes les entrees | |
* ce sont les valeurs du tableau $e[$table] | |
*/ | |
$j = 0; | |
foreach($entry[$table] as $ee => $entryValue) { | |
$entryValue = addslashes($entryValue); | |
debug($entryValue); | |
$content .= "'".$entryValue."'"; | |
$j++; | |
if($j < count($entry[$table])) | |
$content .=", "; | |
} | |
$content .= ");\n"; | |
} | |
$content .= "\n\n"; | |
$content .= "-- --------------------------------------------------------\n\n\n"; | |
} | |
} | |
} | |
/** | |
* Cree le fichier de sauvegarde. | |
* il se trouve dans "app/webroot/files/sql_dump/" | |
*/ | |
App::uses('File', 'Utility'); | |
$filename = "files".DS."sql_dump".DS .$database. "_" .date("d-m-Y_H-i-s"). ".sql"; | |
$file = new File($filename, true); | |
$d['file'] = $filename; | |
$d['database'] = $database; | |
if($file->append($content, true)) { | |
return $d; | |
} else { | |
return false; | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class SettingsController extends AppController { | |
index(){} | |
/** | |
* Exporte la base de donnees | |
* | |
* @access public | |
* @return void | |
*/ | |
public function export() { | |
/** | |
* on recupere le nom du fichier exporte | |
* | |
* La methode exportDatabase() est definie dans app/Model/Setting.php | |
*/ | |
$d = $this->Setting->exportDatabase(); | |
/** | |
* si le fichier existe bien | |
* On va l'enregistrer sur l'ordinateur | |
*/ | |
if($d['database']){ | |
// message de succès | |
} | |
// redirection | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi :)
Please take a look to my fork, just a little patch :
https://gist.github.com/theredfish/20cc8f0236a7a5ab1939