Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Jak wyeksportować 100 tabel do 100 różnych plików
Forum PHP.pl > Forum > Przedszkole
czajna
Witajcie,

szukam sposobu aby wyeksportować wiele tabel z mojej bazy, tak aby każda tabela znalazła się w osobny pliku (potrzbuje to aby dokonać migracji mojej Joomli). Oczywiście mogę eksportować każdą tabelę po kolei za pomocą PhpMyAdmina ale będzie to czasochłonne, czy znacie jakieś sprytniejsze sposoby?

T
WebSee
A nie możesz po prostu wyeksportować wszystkich tabel do jednego pliku?
lobopol
Eksport wszystkich tablic to jednego pliku, a następnie podzielić zawartość tego pliku explodem i w pętli tworzyć pliki zawierające poszczególne elementy utworzonej tablicy.
czajna
Niestety nie może być to jeden plik.

Cytat
Eksport wszystkich tablic to jednego pliku, a następnie podzielić zawartość tego pliku explodem i w pętli tworzyć pliki zawierające poszczególne elementy utworzonej tablicy.


Sorry za ignorancję, ale że to dział dla początkujących pozwolę sobie...czy możesz trochę szerzej objaśnić?
lobopol
No cóż tu napisać więcej eksportujesz sobie wszystkie tabele do jednego pliku za pomocą phpmyadmina, następnie otwierasz sobie plik np funkcją fopen, masz długaśnego stringa którego dzielisz explodem i i tworzysz sobie nowe pliki w pętli do każdego pliku zapisujesz kolejny fragment tablicy uzyskanej z explode-a.
czajna
Dzięki za pomoc, chyba jestem jednak zbyt zielony na taką 'operacje'. Miałem nadzieję że nie zauważyłem jakiejś funkcji w phpmyadminie
gothye
A Ja to widzę tak winksmiley.jpg

  1. $result = mysql_list_tables('twojabaza');
  2. while (($row = mysql_fetch_row($result)))
  3. $tabele[] = $row[0];
  4.  
  5.  
  6. foreach($tables as $key => $table)
  7. {
  8. $query = mysql_query ("SELECT * FROM $table ");
  9.  
  10. while($tmp = @mysql_fetch_assoc($query))
  11. $sql_table[] = $tmp ;
  12.  
  13.  
  14. if($sql_table)
  15. {
  16. fputs($SQLfile,"------------------------------------------\n");
  17. fputs($SQLfile,"--- Copy of tabele : $table \n");
  18. fputs($SQLfile,"------------------------------------------\n\n");
  19.  
  20. fputs($SQLfile,"DELETE FROM $table;\n");
  21.  
  22. foreach($sql_table as $keys => $row)
  23. {
  24. fputs($SQLfile,"INSERT INTO $table (");
  25. foreach($row as $field => $value)
  26. {
  27. $fields[] = $field;
  28. if(isset($value))
  29. $values[] = "'".addcslashes($value,"\r\n\'\"\\")."'";
  30. else
  31. $values[] = 'NULL';
  32. }
  33. fputs($SQLfile,implode(', ',$fields));
  34. fputs($SQLfile,') VALUES (');
  35. fputs($SQLfile,implode(', ',$values));
  36. fputs($SQLfile,");\n");
  37. unset($fields);
  38. unset($values);
  39. }
  40.  
  41. fclose($SQLfile);
  42. }
  43. }
czajna
Hm...i puszczam ten kod w okienku zapytania SQL?
nospor
Nie. To jest skrypt PHP
czajna
A co w tym skrypcie należałoby zmienić żeby eksportowało tabele w trybie zgodności MYSQL 40?
nospor
Cytat
trybie zgodności MYSQL 40
poczekac kilkadziesiąt lat winksmiley.jpg

jesli zas miales na mysli mysql 4.0 to raczej nic nie trzeba zmieniac. Skrypt jest tak prosty ze nie korzysta ze specjalnych rzeczy niedostepnych dla mysql 4.0
czajna
Hm...w PhpMyAdminie jest opcja 'Tryb zgodności SQL' i żeby poprawnie wykonać migracje wiem że właśnie w tym 'trybie' mam eksportować, czyli mam rozumie że Twój skrypt będzie ok?

T
nospor
To nie mój skrypt - ja tylko odpowiadam na Twoje pytania.

Z tego co widzę, skrypt ten nie generuje zadnych dziwnych zapytan, wiec pójdzie i na mysql4. Włącznie z zapytaniami, które tworzy w pliku.
czajna
Ok, czyli skrypt zapisałem jako php, dodałem znaczniki php na początku i końcu, wrzuciłem na serwer odpaliłem za pomocą przeglądarki i...

Kod
Warning: mysql_list_tables() [function.mysql-list-tables]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /homez.106/narowerz/www/migrate.php on line 4

Warning: mysql_list_tables() [function.mysql-list-tables]: A link to the server could not be established in /homez.106/narowerz/www/migrate.php on line 4

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /homez.106/narowerz/www/migrate.php on line 5

Warning: Invalid argument supplied for foreach() in /homez.106/narowerz/www/migrate.php on line 9


Czy coś powinienem uzupełnić oprócz nazwy bazy danych w skrypcie?
nospor
a mysql_connect() dales?
czajna
Teraz dodałem na początku:
Kod
<?php
$host='';
$user='';
$pass='';
$db='';
$link = mysql_connect("$host", "$user", "$pass") or die('Connection error : ' . mysql_error());
mysql_select_db("$db") or die('Could not select database');


i wyskakuje błąd:

Kod
Warning: Invalid argument supplied for foreach() in /homez.106/narowerz/www/migracja/migrate.php on line 18
nospor
czy host i user i db u siebie tez masz puste? No przeciez tak nie mozna.
czajna
Oczywiscie, ze nie. Wszystko jest uzupelnione.
nospor
ok.

w skrypcie jest literowka:
nie:$tabele[] = $row[0];
a:$tables[] = $row[0];
czajna
nospor
uzywasz fputs() a nigdzie nie masz fopen()
czajna
Cytat(nospor @ 29.04.2010, 07:57:54 ) *
uzywasz fputs() a nigdzie nie masz fopen()


Tzn? Co mam zmienić w skrypcie?

I jednak po testach migracji, potrzebuje tych tabel w trybie zgodności MySQL40 (tutaj link o co mi chodzi), ponieważ są istotne różnice w kodzie: http://no-paste.pl/code/10127 i tylko przy MySQL40 migracja się udaje.
Danielcom
Cytat(czajna @ 27.04.2010, 19:58:16 ) *
Witajcie,

szukam sposobu aby wyeksportować wiele tabel z mojej bazy, tak aby każda tabela znalazła się w osobny pliku (potrzbuje to aby dokonać migracji mojej Joomli). Oczywiście mogę eksportować każdą tabelę po kolei za pomocą PhpMyAdmina ale będzie to czasochłonne, czy znacie jakieś sprytniejsze sposoby?

T


Jeśli chcesz zrobić migrację joomli to nie musisz wszystkich tabel zapisywać oddzielnie, przecież można zrobić normalny export. A po za tym tym nie ma aż tak dożo tabel, nawet gdyby ręcznie trzeba było to zrobić.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.