Mysql backup and restore by PHP

Status
Niet open voor verdere reacties.

phobia

Terugkerende gebruiker
Lid geworden
4 sep 2006
Berichten
1.777
Ik ben bezig met een site onderdeel,
waar ik de inhoud van een database backup naar een zip bestand.
Nu lukt het maken van de backup.
Ik maak eerst een txt bestand welke later word gezipt. Ik maak het txt-bestand als volgt:
PHP:
 function fetch_content_database()
{
	// connect to database
	db_connect();
	//query to recive table names
	$query = mysql_query('SHOW TABLE STATUS') or die(mysql_error()); 
	$sql_backup = ''; 

	//whileloop to loop trough every table
	while($row = mysql_fetch_assoc($query))
	{ 
		//show sql query to rebuild the query
		$sql = 'SHOW CREATE TABLE '.$row['Name'].''; 
		//exucte error or give a error
		$query2 = mysql_query($sql) or die(mysql_error()); 
		
		//create sql

		$out = mysql_fetch_assoc($query2); 

		$sql_backup.=$out['Create Table']."\r\n\r\n"; 

		//SQL code to select everything for table
		$sql = 'SELECT * FROM '.$row['Name']; 
		$out = mysql_query($sql); 
		$sql_code = ''; 

		//loop trough the colloms
		while($code = mysql_fetch_array($out,MYSQL_ASSOC))
		{ 
			$sql_code .= "INSERT INTO ".$row['Name']." SET "; 
			
			foreach($code as $insert => $value)
			{ 
				$sql_code.=$insert ."='".addslashes($value)."',"; 
			} 
			$sql_code = substr($sql_code, 0, -1); 
			$sql_code.= ";\r\n"; 
		} 
		$sql_backup.= $sql_code; 
	} 
	return $sql_backup;
}

function create_file($name,$file,$temp_file)
{
	 $fp = fopen($temp_file.$name.'.txt',"w"); 
	 fwrite($fp, $file); 
	 fclose($fp); 
}
ik zal ook de zipfile erbij doen die ik maak.

Maar nu komt het probleem, als ik de inhoud van het zip bestand copy/past in de SQL optie van myadmin. Dan word de database weer netjes hesteld.
Maar ik moet via de site een oudere backup kunnen terug zetten.Maar dan krijg ik een MySQL error.
De query gaat dan als volgt:
PHP:
function import_txt_as_query($temp_file,$name)
{
return file_get_contents ($temp_file.$name.".txt");
}
$data = import_txt_as_query($temp_file,$name);

$result = mysql_query($data);

Kan iemand mij ff en duwtje in de juiste richting geven?
 

Bijlagen

Wat is de mySQL error?

En hoe groot is de file? Scroll eens naar het einde, om te kijken of er niet iets vreemds op het eind staat?
 
Je gooit wel eerst de table product weg voordat de de backup terug zet ? aangezien je namelijk een nieuwe aanmaakt zou je mysql error verklaren

En ik zie nog een fout

Code:
  `image` varchar(50) NOT NULL default 'nophoto.jpg',
  PRIMARY KEY  (`id`)

die , moet weg achter 'nophoto.jpg'


Bovendien is het ook netter om met

Code:
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

nieuwe records toe te voegen aan de database
 
nou de regel waa de fout ontstaat is deze
Code:
INSERT INTO product SET id='1',groep='games',brand='Xbox 360',title='Halo 3',body='Halo 3 is een first person shooter ontwikkeld door Bungie voor de Xbox 360. De game eindigt de verhaallijn die begon in Halo: Combat Evolved en doorging in Halo 2.
		 De definitieve versie van de game werd vrijgegeven op 25 september 2007 in Nieuw-Zeeland (waar het rond middernacht als eerste beschikbaar was)',price='44.95',image='halo3.jpg'

en de fout melding is dit
Code:
Invalid query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO product SET id='1',groep='games',brand='Xbox 360',title='Halo 3',bod' at line 12
 
Ok duidelijk,

Waarschijnlijk een return en newline probleem met str_replace uit de string filteren


Code:
$string = str_replace("\r\n", "", $string);
 
Laatst bewerkt:
Had ik ook al aangedacht, maar dat hielp ook niet.

Heb het nu maar wat omslachtiger opgelost.

heb extra tag in de tekst toegevoegd, waar ik de later met explode de boel uit elkaar trek.

Nu word er dus voor elke opdracht een query gemaakten en uitgevoerd.

Is wat meer werk, maar het werk zo wel!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan