Accueil > > > CLASS MYSQL/SQLITE + SAUVEGARDE DE BDD + COMPRESSION ZIP
CLASS MYSQL/SQLITE + SAUVEGARDE DE BDD + COMPRESSION ZIP
Information sur la source
Description
Après une refonte total du script pour le transformer en class (ca m'as permis de faire ma premiere class au passage), je vous propose une classe gérant 2 type de base : MySQL et SQLite Cette class permet de se connecter a une base, de faire des requetes, diverses manipulations sur la Bdd et une sauvegarde complete de celle ci. Je compte bien l'améliorer encore, mais dans l'etat actuelle elle est largement utilisable (à mon avi). J'attend vos critiques, meme les plus durs.
Source
- <?php
- /******************
- * class_bdd.php *
- * Auteur : GUEKO *
- ******************/
-
- define('BDD_TYPE_MYSQL', 0); // Base de donnée MySQL
- define('BDD_TYPE_SQLITE', 1); // Base de donnée SQLite
-
- define('BDD_QUERY_TYPE_ASSOC', 1); // MYSQL_ASSOC ou SQLITE_ASSOC
- define('BDD_QUERY_TYPE_NUM', 2); // MYSQL_NUM ou SQLITE_NUM
- define('BDD_QUERY_TYPE_BOTH', 3); // MYSQL_BOTH ou SQLITE_BOTH
-
- define('BDD_COMP_NONE', 0); // Pas de compression
- define('BDD_COMP_ZIP', 1); // Compression au format ZIP
-
- class Gueko_Bdd
- {
- private $dbType = 0; // Type de serveur : MySQL ou SQLite
- private $dbHost = ''; // Adresse du serveur (SQLite : Emplacement de la base)
- private $dbName = ''; // Nom de la base (SQLite : inutile)
- private $dbLogin = ''; // Login de connexion (SQLite : inutile)
- private $dbPass = ''; // Mot de passe de connexion (SQLite : inutile)
-
- private $dbLink = 0; // Identifiant de connexion
- private $QueryLink = 0; // Référence de la requete
-
- private $Err_Bdd_Num = 0; // Numéro de l'erreur
- private $Err_Bdd_Mes = ''; // Message de l'erreur
- private $Err_Other = ''; // Message d'erreur personnalisé (hors erreur Bdd)
-
- var $NbreQuery = 0; // Nombre de requete effectué
-
- function Gueko_Bdd ($dbHost = "", $dbName = "", $dbUser = "", $dbPass = "", $dbType = BDD_TYPE_MYSQL) {
- $this->dbHost = $dbHost;
- $this->dbName = $dbName;
- $this->dbUser = $dbUser;
- $this->dbPass = $dbPass;
- $this->dbType = $dbType;
- }
-
- // Se connecte à la base
- function Connect() {
- $this->Err_Other = '';
- if($this->dbLink === 0) {
- switch ($this->dbType) {
- case BDD_TYPE_MYSQL:
- if(!$this->dbLink = @mysql_connect($this->dbHost, $this->dbUser, $this->dbPass)) {
- return false;
- } else {
- if (!@mysql_select_db($this->dbName, $this->dbLink)) {
- return false;
- }
- }
- break;
- case BDD_TYPE_SQLITE:
- if(!$this->dbLink = @sqlite_open($this->dbHost)) {
- return false;
- }
- break;
- }
- }
- return true;
- }
-
- // Ferme la connexion
- function Close() {
- $this->Err_Other = '';
- if ($this->dbLink !== 0) {
- switch ($this->dbType) {
- case BDD_TYPE_MYSQL:
- return @mysql_close($this->dbLink);
- break;
- case BDD_TYPE_SQLITE:
- return @sqlite_close($this->dbLink);
- break;
- }
- }
- }
-
- // Exécute une requete
- function Query($Query) {
- $this->Err_Other = '';
- if ($this->dbLink === 0) {
- if (!$this->Connect()) { return false; }
- }
- switch ($this->dbType) {
- case BDD_TYPE_MYSQL:
- if (!$this->QueryLink = @mysql_query($Query, $this->dbLink)) {
- return false;
- }
- break;
- case BDD_TYPE_SQLITE:
- if (!$this->QueryLink = @sqlite_query($Query, $this->dbLink)) {
- return false;
- }
- break;
- }
- $this->NbreQuery++;
- return true;
- }
-
- /**
- * Récupère le resultat suivant d'une requête
- * $result_type peut prendre les valeurs :
- * - BDD_QUERY_TYPE_BOTH (défaut), vous récupérerez un tableau contenant des indices associatifs et numériques
- * - BDD_QUERY_TYPE_ASSOC, vous ne récupérerez que les indices associatifs
- * - BDD_QUERY_TYPE_NUM, vous ne récupérerez que les indices numériques
- **/
- function Get_Next_Result($result_type = BDD_QUERY_TYPE_BOTH) {
- $this->Err_Other = '';
- switch ($this->dbType) {
- case BDD_TYPE_MYSQL:
- $Result = @mysql_fetch_array($this->QueryLink, $result_type);
- break;
- case BDD_TYPE_SQLITE:
- $Result = @sqlite_fetch_array($this->QueryLink, $result_type);
- break;
- }
- if (!$Result) { return false; }
- return $Result;
- }
-
- // Retourne le numéro de ligne de la dernière ligne insérée
- function Get_Last_Row_Id() {
- $this->Err_Other = '';
- if ($this->dbLink === 0) { return false; }
- switch ($this->dbType) {
- case BDD_TYPE_MYSQL:
- if (!$Result = @mysql_insert_id($this->dbLink)) {
- return false;
- }
- break;
- case BDD_TYPE_SQLITE:
- if (!$Result = @sqlite_last_insert_rowid($this->dbLink)) {
- return false;
- }
- break;
- }
- return $Result;
- }
-
- // Retourne le nombre de lignes qui ont été modifiées par la dernière requête
- function Get_Last_Change() {
- $this->Err_Other = '';
- if ($this->dbLink === 0) { return false; }
- switch ($this->dbType) {
- case BDD_TYPE_MYSQL:
- if (!$Result = @mysql_affected_rows($this->dbLink)) {
- return false;
- }
- break;
- case BDD_TYPE_SQLITE:
- if (!$Result = @sqlite_changes($this->dbLink)) {
- return false;
- }
- break;
- }
- return $Result;
- }
-
- // Retourne le nombre de lignes d'un résultat
- function Get_Num_Rows() {
- $this->Err_Other = '';
- if ($this->dbLink === 0) { return false; }
- switch ($this->dbType) {
- case BDD_TYPE_MYSQL:
- if (!$Result = @mysql_num_rows($this->QueryLink)) {
- return false;
- }
- break;
- case BDD_TYPE_SQLITE:
- if (!$Result = @sqlite_num_rows($this->QueryLink)) {
- return false;
- }
- break;
- }
- return $Result;
- }
-
- // Récupère le message d'erreur
- function Get_Error() {
- if ($this->Err_Other === '') {
- switch ($this->dbType) {
- case BDD_TYPE_MYSQL:
- $this->Err_Bdd_Num = @mysql_errno($this->dbLink);
- $this->Err_Bdd_Mes = @mysql_error($this->dbLink);
- return $this->Err_Bdd_Num.' : '.$this->Err_Bdd_Mes;
- break;
- case BDD_TYPE_SQLITE:
- $this->Err_Bdd_Num = @sqlite_last_error($this->dbLink);
- $this->Err_Bdd_Mes = @sqlite_error_string($this->dbLink);
- return $this->Err_Bdd_Num.' : '.$this->Err_Bdd_Mes;
- break;
- }
- } else {
- return $this->Err_Other;
- }
- }
-
- // Récupère la liste complète des tables de la base sous forme d'un tableau
- function Get_All_Tables() {
- $this->Err_Other = '';
- switch ($this->dbType) {
- case BDD_TYPE_MYSQL:
- $Result = @mysql_query('SHOW TABLES', $this->dbLink);
- $this->NbreQuery++;
- while ($row = @mysql_fetch_row($Result)) {
- $Tables[] = $row[0];
- }
- break;
- case BDD_TYPE_SQLITE:
- $Result = @sqlite_query('SELECT tbl_name FROM SQLITE_MASTER WHERE type="table"', $this->dbLink);
- $this->NbreQuery++;
- while ($row = @sqlite_fetch_array($this->QueryLink, BDD_QUERY_TYPE_NUM)) {
- $Tables[] = $row[0];
- }
- break;
- }
- if (!isset($Tables)) {
- $this->Err_Other = 'ERREUR : Votre base de donnée ne contient pas de table.';
- return false;
- }
- return $Tables;
- }
-
- // Protège les caractères spéciaux SQL
- function Escape_String($String) {
- $this->Err_Other = '';
- if ($this->dbLink === 0) { return false; }
- switch ($this->dbType) {
- case BDD_TYPE_MYSQL:
- if (!$Result = @mysql_real_escape_string($String, $this->dbLink)) {
- $this->Err_Other = 'Erreur lors du formatage de la chaine de caractère.';
- return false;
- }
- break;
- case BDD_TYPE_SQLITE:
- if (!$Result = @sqlite_escape_string($String)) {
- $this->Err_Other = 'Erreur lors du formatage de la chaine de caractère.';
- return false;
- }
- break;
- }
- return $Result;
- }
-
- function Optimize_All_Tables() {
- $this->Err_Other = '';
- switch ($this->dbType) {
- case BDD_TYPE_MYSQL:
- if ($Tables = $this->Get_All_Tables()) {
- $First = true;
- foreach ($Tables as $Table) {
- if ($First) {
- $First = false;
- $Query = "OPTIMIZE TABLE `".$Table."`";
- } else {
- $Query .= ", `".$Table."`";
- }
- }
- if (!@mysql_query($Query, $this->dbLink)) {
- return false;
- }
- } else {
- return false;
- }
- break;
- case BDD_TYPE_SQLITE:
- if (!@sqlite_query('VACUUM', $this->dbLink)) {
- $this->Err_Other = 'Erreur lors de l\'optimisation des tables.';
- return false;
- }
- break;
- }
- $this->NbreQuery++;
- return true;
- }
-
- /**
- * Créé un fichier de sauvegarde de la base complète et retourne l'adresse du fichier
- * Pour les bases MySQL : Le format du fichier est écrit en SQL, avec compression si selectionné
- * Pour les bases SQLite : une simple copie du fichier de la base est faite, avec compression si selectionné
- *
- * $Chemin : Chemin de destination de la sauvegarde ("mon/dossier/de/sauvegarde/")
- * $Fichier : Nom du fichier de sauvegarde ("mon_fichier.sql")
- * $Compression : Défini si on compresse ou pas et dans quel format
- *
- **/
- function Save_base($Chemin = "", $Fichier = "", $Compression = BDD_COMP_ZIP) {
- $this->Err_Other = '';
- $ExtZip = '.zip';
- if ($Chemin !== "") {
- if (!@mkdir($Chemin,0777,true)) {
- $this->Err_Other = 'Erreur lors de la création du chemin de sauvegarde : '.$Chemin;
- return false;
- }
- if (substr($Chemin,-1) !== '/') { $Chemin .= '/'; }
- }
-
- switch ($this->dbType) {
- case BDD_TYPE_MYSQL:
- if ($Fichier === "") { $Fichier = date('Y-m-d_H\hi\ms',time()).'.sql'; }
- if (!$Tables = $this->Get_All_Tables()) {
- $this->Err_Other = 'Il n\'y a pas de tables dans votre base de données.';
- return false;
- } else {
- $Num_Fich = fopen($Chemin.$Fichier,'w');
- foreach($Tables as $Table) {
- $Result = @mysql_query("SHOW CREATE TABLE `".$Table."`", $this->dbLink);
- $this->NbreQuery++;
- $Row = @mysql_fetch_row($Result);
- fputs($Num_Fich,"DROP TABLE IF EXISTS `".$Table."`;\n");
- fputs($Num_Fich,$Row[1].';'."\n\n");
- unset($Result, $Row);
-
- $Result = @mysql_query("SHOW COLUMNS FROM `".$Table."`", $this->dbLink);
- $this->NbreQuery++;
- while ($Row = @mysql_fetch_row($Result)) { $Ligne[] = $Row[0]; }
- $My_Insert = "INSERT INTO `".$Table."` (`".join("`, `", $Ligne)."`) VALUES\n";
- unset($Result, $row, $Ligne);
-
- fputs($Num_Fich,$My_Insert);
- $xx = 0;
- $Result = mysql_query("SELECT * FROM `".$Table."`", $this->dbLink);
- $this->NbreQuery++;
- while ($Row = mysql_fetch_row($Result)) {
- $Rows[] = $Row;
- }
- foreach($Rows as $Row) {
- if ($xx === 400) {
- fputs($Num_Fich,join(','."\n",$My_Rows).';'."\n");
- fputs($Num_Fich,$My_Insert);
- $xx=0;
- unset($My_Rows);
- }
- for ($i=0;$i<count($Row);$i++) {
- $Row[$i] = $this->Escape_String($Row[$i]);
- if (!$Row[$i]) {
- $Row[$i] = "NULL";
- } elseif (is_numeric($Row[$i])) {
- $Row[$i] = $Row[$i];
- } else {
- $Row[$i] = "'".$Row[$i]."'";
- }
- }
- $My_Rows[] = "(".join(",", $Row).")";
- $xx++;
- }
- fputs($Num_Fich,join(','."\n",$My_Rows).';'."\n\n\n");
- unset($My_Insert, $xx, $Result, $Row, $Rows, $My_Rows);
- }
- fclose($Num_Fich);
- if ($Compression === BDD_COMP_ZIP) {
- include_once 'pclzip.lib.php';
- $archive = new PclZip($Chemin.$Fichier.$ExtZip);
- if (!$archive->create($Chemin.$Fichier)) {
- $this->Err_Other = 'Erreur lors de la création de l\'archive : '.$Chemin.$Fichier.$ExtZip;
- return false;
- }
- unlink($Chemin.$Fichier);
- return $Chemin.$Fichier.$ExtZip;
- } else {
- return $Chemin.$Fichier;
- }
- }
- break;
- case BDD_TYPE_SQLITE:
- if ($Fichier === "") { $Fichier = date('Y-m-d_H\hi\ms',time()).'.sqlite'; }
- if ($Compression === BDD_COMP_ZIP) {
- include_once 'pclzip.lib.php';
- $this->Close();
- $archive = new PclZip($Chemin.$Fichier.$ExtZip);
- if (!$archive->create($this->dbHost)) {
- $this->Err_Other = 'Erreur lors de la création de l\'archive : '.$Chemin.$Fichier.$ExtZip;
- $this->Connect();
- return false;
- }
- $this->Connect();
- return $Chemin.$Fichier.$ExtZip;
- } else {
- $this->Optimize_All_Tables();
- $this->Close();
- if (!@file_exists($Chemin.$Fichier)) {
- if (!@copy($this->dbHost,$Chemin.$Fichier)) {
- $this->Err_Other = 'Erreur lors de la sauvegarde du fichier : '.$Chemin.$Fichier;
- $this->Connect();
- return false;
- }
- } else {
- $this->Err_Other = 'Sauvegarde annulée, un fichier du même nom existe déjà.';
- $this->Connect();
- return false;
- }
- $this->Connect();
- return $Chemin.$Fichier;
- }
- break;
- }
- }
- }
- ?>
<?php
/******************
* class_bdd.php *
* Auteur : GUEKO *
******************/
define('BDD_TYPE_MYSQL', 0); // Base de donnée MySQL
define('BDD_TYPE_SQLITE', 1); // Base de donnée SQLite
define('BDD_QUERY_TYPE_ASSOC', 1); // MYSQL_ASSOC ou SQLITE_ASSOC
define('BDD_QUERY_TYPE_NUM', 2); // MYSQL_NUM ou SQLITE_NUM
define('BDD_QUERY_TYPE_BOTH', 3); // MYSQL_BOTH ou SQLITE_BOTH
define('BDD_COMP_NONE', 0); // Pas de compression
define('BDD_COMP_ZIP', 1); // Compression au format ZIP
class Gueko_Bdd
{
private $dbType = 0; // Type de serveur : MySQL ou SQLite
private $dbHost = ''; // Adresse du serveur (SQLite : Emplacement de la base)
private $dbName = ''; // Nom de la base (SQLite : inutile)
private $dbLogin = ''; // Login de connexion (SQLite : inutile)
private $dbPass = ''; // Mot de passe de connexion (SQLite : inutile)
private $dbLink = 0; // Identifiant de connexion
private $QueryLink = 0; // Référence de la requete
private $Err_Bdd_Num = 0; // Numéro de l'erreur
private $Err_Bdd_Mes = ''; // Message de l'erreur
private $Err_Other = ''; // Message d'erreur personnalisé (hors erreur Bdd)
var $NbreQuery = 0; // Nombre de requete effectué
function Gueko_Bdd ($dbHost = "", $dbName = "", $dbUser = "", $dbPass = "", $dbType = BDD_TYPE_MYSQL) {
$this->dbHost = $dbHost;
$this->dbName = $dbName;
$this->dbUser = $dbUser;
$this->dbPass = $dbPass;
$this->dbType = $dbType;
}
// Se connecte à la base
function Connect() {
$this->Err_Other = '';
if($this->dbLink === 0) {
switch ($this->dbType) {
case BDD_TYPE_MYSQL:
if(!$this->dbLink = @mysql_connect($this->dbHost, $this->dbUser, $this->dbPass)) {
return false;
} else {
if (!@mysql_select_db($this->dbName, $this->dbLink)) {
return false;
}
}
break;
case BDD_TYPE_SQLITE:
if(!$this->dbLink = @sqlite_open($this->dbHost)) {
return false;
}
break;
}
}
return true;
}
// Ferme la connexion
function Close() {
$this->Err_Other = '';
if ($this->dbLink !== 0) {
switch ($this->dbType) {
case BDD_TYPE_MYSQL:
return @mysql_close($this->dbLink);
break;
case BDD_TYPE_SQLITE:
return @sqlite_close($this->dbLink);
break;
}
}
}
// Exécute une requete
function Query($Query) {
$this->Err_Other = '';
if ($this->dbLink === 0) {
if (!$this->Connect()) { return false; }
}
switch ($this->dbType) {
case BDD_TYPE_MYSQL:
if (!$this->QueryLink = @mysql_query($Query, $this->dbLink)) {
return false;
}
break;
case BDD_TYPE_SQLITE:
if (!$this->QueryLink = @sqlite_query($Query, $this->dbLink)) {
return false;
}
break;
}
$this->NbreQuery++;
return true;
}
/**
* Récupère le resultat suivant d'une requête
* $result_type peut prendre les valeurs :
* - BDD_QUERY_TYPE_BOTH (défaut), vous récupérerez un tableau contenant des indices associatifs et numériques
* - BDD_QUERY_TYPE_ASSOC, vous ne récupérerez que les indices associatifs
* - BDD_QUERY_TYPE_NUM, vous ne récupérerez que les indices numériques
**/
function Get_Next_Result($result_type = BDD_QUERY_TYPE_BOTH) {
$this->Err_Other = '';
switch ($this->dbType) {
case BDD_TYPE_MYSQL:
$Result = @mysql_fetch_array($this->QueryLink, $result_type);
break;
case BDD_TYPE_SQLITE:
$Result = @sqlite_fetch_array($this->QueryLink, $result_type);
break;
}
if (!$Result) { return false; }
return $Result;
}
// Retourne le numéro de ligne de la dernière ligne insérée
function Get_Last_Row_Id() {
$this->Err_Other = '';
if ($this->dbLink === 0) { return false; }
switch ($this->dbType) {
case BDD_TYPE_MYSQL:
if (!$Result = @mysql_insert_id($this->dbLink)) {
return false;
}
break;
case BDD_TYPE_SQLITE:
if (!$Result = @sqlite_last_insert_rowid($this->dbLink)) {
return false;
}
break;
}
return $Result;
}
// Retourne le nombre de lignes qui ont été modifiées par la dernière requête
function Get_Last_Change() {
$this->Err_Other = '';
if ($this->dbLink === 0) { return false; }
switch ($this->dbType) {
case BDD_TYPE_MYSQL:
if (!$Result = @mysql_affected_rows($this->dbLink)) {
return false;
}
break;
case BDD_TYPE_SQLITE:
if (!$Result = @sqlite_changes($this->dbLink)) {
return false;
}
break;
}
return $Result;
}
// Retourne le nombre de lignes d'un résultat
function Get_Num_Rows() {
$this->Err_Other = '';
if ($this->dbLink === 0) { return false; }
switch ($this->dbType) {
case BDD_TYPE_MYSQL:
if (!$Result = @mysql_num_rows($this->QueryLink)) {
return false;
}
break;
case BDD_TYPE_SQLITE:
if (!$Result = @sqlite_num_rows($this->QueryLink)) {
return false;
}
break;
}
return $Result;
}
// Récupère le message d'erreur
function Get_Error() {
if ($this->Err_Other === '') {
switch ($this->dbType) {
case BDD_TYPE_MYSQL:
$this->Err_Bdd_Num = @mysql_errno($this->dbLink);
$this->Err_Bdd_Mes = @mysql_error($this->dbLink);
return $this->Err_Bdd_Num.' : '.$this->Err_Bdd_Mes;
break;
case BDD_TYPE_SQLITE:
$this->Err_Bdd_Num = @sqlite_last_error($this->dbLink);
$this->Err_Bdd_Mes = @sqlite_error_string($this->dbLink);
return $this->Err_Bdd_Num.' : '.$this->Err_Bdd_Mes;
break;
}
} else {
return $this->Err_Other;
}
}
// Récupère la liste complète des tables de la base sous forme d'un tableau
function Get_All_Tables() {
$this->Err_Other = '';
switch ($this->dbType) {
case BDD_TYPE_MYSQL:
$Result = @mysql_query('SHOW TABLES', $this->dbLink);
$this->NbreQuery++;
while ($row = @mysql_fetch_row($Result)) {
$Tables[] = $row[0];
}
break;
case BDD_TYPE_SQLITE:
$Result = @sqlite_query('SELECT tbl_name FROM SQLITE_MASTER WHERE type="table"', $this->dbLink);
$this->NbreQuery++;
while ($row = @sqlite_fetch_array($this->QueryLink, BDD_QUERY_TYPE_NUM)) {
$Tables[] = $row[0];
}
break;
}
if (!isset($Tables)) {
$this->Err_Other = 'ERREUR : Votre base de donnée ne contient pas de table.';
return false;
}
return $Tables;
}
// Protège les caractères spéciaux SQL
function Escape_String($String) {
$this->Err_Other = '';
if ($this->dbLink === 0) { return false; }
switch ($this->dbType) {
case BDD_TYPE_MYSQL:
if (!$Result = @mysql_real_escape_string($String, $this->dbLink)) {
$this->Err_Other = 'Erreur lors du formatage de la chaine de caractère.';
return false;
}
break;
case BDD_TYPE_SQLITE:
if (!$Result = @sqlite_escape_string($String)) {
$this->Err_Other = 'Erreur lors du formatage de la chaine de caractère.';
return false;
}
break;
}
return $Result;
}
function Optimize_All_Tables() {
$this->Err_Other = '';
switch ($this->dbType) {
case BDD_TYPE_MYSQL:
if ($Tables = $this->Get_All_Tables()) {
$First = true;
foreach ($Tables as $Table) {
if ($First) {
$First = false;
$Query = "OPTIMIZE TABLE `".$Table."`";
} else {
$Query .= ", `".$Table."`";
}
}
if (!@mysql_query($Query, $this->dbLink)) {
return false;
}
} else {
return false;
}
break;
case BDD_TYPE_SQLITE:
if (!@sqlite_query('VACUUM', $this->dbLink)) {
$this->Err_Other = 'Erreur lors de l\'optimisation des tables.';
return false;
}
break;
}
$this->NbreQuery++;
return true;
}
/**
* Créé un fichier de sauvegarde de la base complète et retourne l'adresse du fichier
* Pour les bases MySQL : Le format du fichier est écrit en SQL, avec compression si selectionné
* Pour les bases SQLite : une simple copie du fichier de la base est faite, avec compression si selectionné
*
* $Chemin : Chemin de destination de la sauvegarde ("mon/dossier/de/sauvegarde/")
* $Fichier : Nom du fichier de sauvegarde ("mon_fichier.sql")
* $Compression : Défini si on compresse ou pas et dans quel format
*
**/
function Save_base($Chemin = "", $Fichier = "", $Compression = BDD_COMP_ZIP) {
$this->Err_Other = '';
$ExtZip = '.zip';
if ($Chemin !== "") {
if (!@mkdir($Chemin,0777,true)) {
$this->Err_Other = 'Erreur lors de la création du chemin de sauvegarde : '.$Chemin;
return false;
}
if (substr($Chemin,-1) !== '/') { $Chemin .= '/'; }
}
switch ($this->dbType) {
case BDD_TYPE_MYSQL:
if ($Fichier === "") { $Fichier = date('Y-m-d_H\hi\ms',time()).'.sql'; }
if (!$Tables = $this->Get_All_Tables()) {
$this->Err_Other = 'Il n\'y a pas de tables dans votre base de données.';
return false;
} else {
$Num_Fich = fopen($Chemin.$Fichier,'w');
foreach($Tables as $Table) {
$Result = @mysql_query("SHOW CREATE TABLE `".$Table."`", $this->dbLink);
$this->NbreQuery++;
$Row = @mysql_fetch_row($Result);
fputs($Num_Fich,"DROP TABLE IF EXISTS `".$Table."`;\n");
fputs($Num_Fich,$Row[1].';'."\n\n");
unset($Result, $Row);
$Result = @mysql_query("SHOW COLUMNS FROM `".$Table."`", $this->dbLink);
$this->NbreQuery++;
while ($Row = @mysql_fetch_row($Result)) { $Ligne[] = $Row[0]; }
$My_Insert = "INSERT INTO `".$Table."` (`".join("`, `", $Ligne)."`) VALUES\n";
unset($Result, $row, $Ligne);
fputs($Num_Fich,$My_Insert);
$xx = 0;
$Result = mysql_query("SELECT * FROM `".$Table."`", $this->dbLink);
$this->NbreQuery++;
while ($Row = mysql_fetch_row($Result)) {
$Rows[] = $Row;
}
foreach($Rows as $Row) {
if ($xx === 400) {
fputs($Num_Fich,join(','."\n",$My_Rows).';'."\n");
fputs($Num_Fich,$My_Insert);
$xx=0;
unset($My_Rows);
}
for ($i=0;$i<count($Row);$i++) {
$Row[$i] = $this->Escape_String($Row[$i]);
if (!$Row[$i]) {
$Row[$i] = "NULL";
} elseif (is_numeric($Row[$i])) {
$Row[$i] = $Row[$i];
} else {
$Row[$i] = "'".$Row[$i]."'";
}
}
$My_Rows[] = "(".join(",", $Row).")";
$xx++;
}
fputs($Num_Fich,join(','."\n",$My_Rows).';'."\n\n\n");
unset($My_Insert, $xx, $Result, $Row, $Rows, $My_Rows);
}
fclose($Num_Fich);
if ($Compression === BDD_COMP_ZIP) {
include_once 'pclzip.lib.php';
$archive = new PclZip($Chemin.$Fichier.$ExtZip);
if (!$archive->create($Chemin.$Fichier)) {
$this->Err_Other = 'Erreur lors de la création de l\'archive : '.$Chemin.$Fichier.$ExtZip;
return false;
}
unlink($Chemin.$Fichier);
return $Chemin.$Fichier.$ExtZip;
} else {
return $Chemin.$Fichier;
}
}
break;
case BDD_TYPE_SQLITE:
if ($Fichier === "") { $Fichier = date('Y-m-d_H\hi\ms',time()).'.sqlite'; }
if ($Compression === BDD_COMP_ZIP) {
include_once 'pclzip.lib.php';
$this->Close();
$archive = new PclZip($Chemin.$Fichier.$ExtZip);
if (!$archive->create($this->dbHost)) {
$this->Err_Other = 'Erreur lors de la création de l\'archive : '.$Chemin.$Fichier.$ExtZip;
$this->Connect();
return false;
}
$this->Connect();
return $Chemin.$Fichier.$ExtZip;
} else {
$this->Optimize_All_Tables();
$this->Close();
if (!@file_exists($Chemin.$Fichier)) {
if (!@copy($this->dbHost,$Chemin.$Fichier)) {
$this->Err_Other = 'Erreur lors de la sauvegarde du fichier : '.$Chemin.$Fichier;
$this->Connect();
return false;
}
} else {
$this->Err_Other = 'Sauvegarde annulée, un fichier du même nom existe déjà.';
$this->Connect();
return false;
}
$this->Connect();
return $Chemin.$Fichier;
}
break;
}
}
}
?>
Conclusion
Le fichier "index.php" est juste là a titre d'exemple d'utilisation de la class.
Historique
- 02 mars 2008 23:30:59 :
- refonte totale du script.
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Compression ZIP [ par phpboot ]
Merci de lire la <ST
j'ai un problem sql et class [ par theyas ]
salut j un problem ou partie de class news je vais ajouté un condition sql(where)pour afficher seulment les enregistrement qui porte le nom champ(nom_
SQL server et sauvegarde [ par paloxicide ]
J'ai une base de donées sous sql server express 2005 et j'aimerais savoir s'il etait possible de sauvegarder ma base au format *.sql ou *.txt (co
Problème de variables en dehors d'une class [ par yukimura27 ]
Bonjour à tous, J'ai un problème pour utiliser une variable en dehors de ma class. Voici mon code: class pouet { public function SelectAll () {
Problème avec les requêtes préparé [ par yukimura27 ]
Bonjour, J'aimerais que l'on éclair ma lanterne car j'ai quelques soucis et quelques incompréhension par ci par la [^^happy13]. j'ai une page PDO.ph
PHP/SQL [ par Sotaicho ]
c'est l'apostrophe qui me rend la vie dure ( dans l'enregistrement de mon formulaire dans ma base) je sais qu'il y a une fonction "normalize" ou un tr
trier des donnée SQL en double [ par noctanvol ]
bonjour je suis en train de mettre en place un petit outil d'affichage de statistique d'impression sur un parc d'imprimante de bonne taille (500 envi
Liste déroulante avec font-family [ par KieferS ]
Bonjour, Je souhaite faire ceci : [code=php] "; $sql_sel_002 = mysql_query("SELECT * FROM set_police WHERE id = '1'"); if ($result_002 = mysql_fetch
PHP et SQL [ par bigbik ]
Bonsoir chers amis, Je suis stagiaire dans une grande entreprise. Pour les besoins du stage j'ai comme mission de développer une petite application qu
zipper des fichiers en php [ par jimdano ]
Bonsoir, j'ai un souci : Je veux créer un .zip d'une arborescence, en récupérent seulement les fichiers xml. Ce que j'ai fait récupère bien que les fi
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|