Autor | Zpráva | ||
---|---|---|---|
Cakewalk Profil |
#1 · Zasláno: 12. 5. 2013, 16:22:37
Dobrý den,
zálohuji databázi scriptem: if($tables == '*') { $tables = array(); $result = mysql_query('SHOW TABLES'); while($row = mysql_fetch_row($result)) { $tables[] = $row[0]; } } else { $tables = is_array($tables) ? $tables : explode(',',$tables); } foreach($tables as $table) { $result = mysql_query('SELECT * FROM '.$table); $num_fields = mysql_num_fields($result); $return.= 'DROP TABLE IF EXISTS'.$table.';'; $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table)); $return.= "\n\n".$row2[1].";\n\n"; for ($i = 0; $i < $num_fields; $i++) { while($row = mysql_fetch_row($result)) { $return.= 'INSERT INTO '.$table.' VALUES('; for($j=0; $j<$num_fields; $j++) { $row[$j] = addslashes($row[$j]); $row[$j] = ereg_replace("\n","\\n",$row[$j]); if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; } if ($j<($num_fields-1)) { $return.= ','; } } $return.= ");\n"; } } $return.="\n\n\n"; na výstupu pak dostanu tabulku např.: INSERT INTO `ap_access` VALUES('1','1','1','1','1','1'); INSERT INTO `ap_access` VALUES('1','2','1','1','1','1'); INSERT INTO `ap_access` VALUES('1','3','1','1','1','1'); INSERT INTO `ap_access` VALUES('1','4','1','1','1','1'); INSERT INTO `ap_access` VALUES('1','5','1','1','1','1'); INSERT INTO `ap_access` VALUES('1','6','1','1','1','1'); INSERT INTO `ap_access` VALUES('1','7','1','1','1','1'); atd. Potřeboval bych ale výstup: INSERT INTO `ap_access` VALUES ('1','1','1','1','1','1'), ('1','2','1','1','1','1'), ('1','3','1','1','1','1'), ('1','4','1','1','1','1'), ('1','5','1','1','1','1'), ('1','6','1','1','1','1'), ('1','7','1','1','1','1'), ('1','8','1','1','1','1'), ('1','9','1','1','1','1'), atd. Prosím jen nakopněte. Díky |
||
nethor Profil |
$return.= 'INSERT INTO '.$table.' VALUES while($row = mysql_fetch_row($result)) PS: místo $return.=
by bylo šikovnější použít $return[]= v kombinaci s implode().
|
||
Cakewalk Profil |
#3 · Zasláno: 14. 5. 2013, 09:00:11
Díky za reakci. Tohle jsem zkoušel, ale pak mi to zapíše i INS..... u tabulky bez obsahu. Toho se pak nemůžu zbavit. Nemůžu přijít na adekvátní podmínku.
|
||
nethor Profil |
#4 · Zasláno: 14. 5. 2013, 09:32:48
Řešil bych to takhle nějak:
$radky = array(); $export = "" ; while($row = mysql_fetch_row($result)) { // cyklus řádků $hodnoty = array(); foreach ($row as $key=>$value) { // cyklus hodnot v řádku $value = $value; // escape a potřebné úpravy $hodnoty[] = $value ; } $radky[] = "(" .implode(",", $hodnoty) . ")"; } if (count($radky) > 0) { $export = "INSERT INTO `ap_access` VALUES ".implode(",\n", $radky); } |
||
preca1 Profil |
#5 · Zasláno: 14. 5. 2013, 09:33:53
Cakewalk:
„Nemůžu přijít na adekvátní podmínku.“ Vždyť sis sám odpověděl o větu dřív: „u tabulky bez obsahu“ => Jestli tabulka má nějaký obsah... |
||
peta Profil |
#6 · Zasláno: 14. 5. 2013, 11:09:10
$export = "INSERT INTO `ap_access` VALUES ".implode(",\n", $radky);
To neni uplne nejlepsi reseni, php ma omezenou pamet pro sql dotaz. Mozna bych to orezal po 100 radcich pro jeden insert. |
||
Tori Profil |
#7 · Zasláno: 14. 5. 2013, 14:24:48
Cakewalk:
Pokud budete mít hodně velké tabulky (řádově desítky MB), tak by bylo paměťově šetrnější rovnou posílat data do souboru (sekvenční zápis, fwrite) a po ukončení exportu pracovat s tím souborem. |
||
Cakewalk Profil |
#8 · Zasláno: 15. 5. 2013, 07:31:10
Peta a Toti: přesně tohle řeším. Vše si exportuji do souboru, ale i tak má soubor příliš velikou velikost pro následný export přes PHPMYADMIN. Jak píše PETA, chtěl bych INSERT oříznout např. po 100 řádcích. Tedy např.:
INSERT INTO `ap_access` VALUES ('1','1','1','1','1','1'), ('1','2','1','1','1','1'), ('1','3','1','1','1','1'), atd. INSERT INTO `ap_access` VALUES ('1','100','1','1','1','1'), ('1','101','1','1','1','1'), ('1','102','1','1','1','1'), atd. a samozřejmě, když není obsah, INSERT se nevypíše. Aktuálně mi to vypíše. INSERT INTO `ap_access` VALUES ('1','1','1','1','1','1'), INSERT INTO `ap_access` VALUES ('1','2','1','1','1','1'), INSERT INTO `ap_access` VALUES ('1','3','1','1','1','1'), případně jsem si to rozdělil pro celou tabulku, ale vypíše mi to i prázdné INSERT INTO `ap_access` VALUES ('1','1','1','1','1','1'), ('1','2','1','1','1','1'), ('1','3','1','1','1','1'), |
||
Tori Profil |
#9 · Zasláno: 15. 5. 2013, 08:13:03
Cakewalk:
U PMA se dá nastavit složka, ze které se importují .sql soubory bez omezení datové velikosti. Nevím, jestli máte přístup k nastavení PMA, nebo jestli by to byli na hostingu ochotní nastavit. Jinak asi rozdělit do několika souborů. |
||
Cakewalk Profil |
To právě nemůžu. Snažím se spíše dost stejnou podobu zálohy, jako mi uloží PHPMYADMIN sám při exportu.
|
||
nethor Profil |
#11 · Zasláno: 15. 5. 2013, 08:47:27
Tori:
PMA si může nainstalovat i sám, ale je to dost těžkopádná obluda. :-) Osobně používám Adminer www.adminer.org/. |
||
peta Profil |
#12 · Zasláno: 15. 5. 2013, 08:53:18
phpmyadmin, kdyz nejde importovat velky soubor, tak vypise hlasku s odkazem na bigdump.php, ktery to umi.
|
||
Cakewalk Profil |
#13 · Zasláno: 15. 5. 2013, 09:34:21
peta: to ořezání po 100 řádcích mne zajímá
|
||
Cakewalk Profil |
#14 · Zasláno: 17. 5. 2013, 08:30:38
Našel by se někdo, kdo ví, jak zápis INSER... rozdělit po např. 100 řádcích?
|
||
ts_istudio Profil |
#15 · Zasláno: 17. 5. 2013, 08:35:12
Cakewalk:
„Našel by se někdo, kdo ví, jak zápis INSER... rozdělit po např. 100 řádcích?“ Použij nethorův skript a počítej průchody uvnitř toho while. Po každé stovce ukonči jeden INSERT, začni další a vynuluj počítadlo. |
||
nethor Profil |
Nějak takhle, netestováno:
$radky = array(); $export = array(); $i = 0; while($row = mysql_fetch_row($result)) { // cyklus řádků $hodnoty = array(); foreach ($row as $key=>$value) { // cyklus hodnot v řádku $value = $value; // escape a potřebné úpravy $hodnoty[] = $value ; } $radky[] = "(" .implode(",", $hodnoty) . ")"; if($i++ % 100 == 0) { $export[] = "INSERT INTO `ap_access` VALUES ".implode(",\n", $radky); $radky = array(); } } echo implode("\n", $export); Jestli chceš ale exportovat i strukturu tabulek vč. indexů at.. , poohlédni se raději po nějakém hotovém řešení. Struktura je daleko komplikovanější. |
||
ts_istudio Profil |
#17 · Zasláno: 17. 5. 2013, 09:33:22
nethor:
Nechybí na 10. řádku za závorkou čárka? |
||
juriad Profil |
#18 · Zasláno: 17. 5. 2013, 09:47:31
ts_istudio:
Ne, ta čárka se tam přidá během implodu na řádce 13. |
||
ts_istudio Profil |
#19 · Zasláno: 17. 5. 2013, 10:03:52
juriad:
aha, pardon, tam jsem ji přehlídl. |
||
Časová prodleva: 11 let
|
0