Informations

Cree le 03/01/2010

Modifie le 03/01/2010

Php

# Elfangels

#####

Participants

Pas de participants

Associations

Pas de dossiers associes

Executer tous les scripts SQL d'un dossier

Lors de l'installation (ou de la réinstallation) d'un site web, nous sommes souvent amenés à exécuter à la chaine des scripts SQL pour initialiser la base de données. Voici une petite fonction qui vous permet de vous faciliter la tâche lorsque ces scripts donc séparés en plusieurs fichiers. La seule contrainte est de nommer vos fichiers en indiquant l'ordre d'exécution par un numéro suivit d'un tiret bas puis du titre du fichier pour chaque nom de fichier, exemple : 1_membres.sql, 2_articles.sql, ...

/**
 * Executes all sql files located in a folder and order by name, filenames must be like "8_sql_file.sql"
 * @param $pdo PDO : pdo object
 * @param $folder string : folder path of sql files, ending by "/"
 */
function install_db(PDO $pdo,$folder) {
	// Open directory
	if(!is_dir($folder)) {
		throw new Exception('Folder \''.$folder.'\' doesn\'t exist.');
	}
	if(!($directory = opendir($folder))) {
		throw new Exception('Permission denied to read in folder \''.$folder.'\'.');
	}
	
	// List SQL files
	$tabFiles = array();
	while(($entry = readdir($directory)) !== false) { // List files
		if(sscanf(pathinfo($entry,PATHINFO_BASENAME),'%d_%s.sql',$fileNum,$fileName) == 2) { // SQL file
			$tabFiles[$fileNum] = $folder.$entry;
		}
	}
	ksort($tabFiles);
	
	// List and execute SQL requests
	foreach($tabFiles as $file) {
		$tabRequests = explode(';',file_get_contents($file));
		foreach($tabRequests as $request) {
			$pdo->query($request);
		}
	}
}