| 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: 13 let
|
|||
0