Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zmiana tresci w bazie danych
spamator12
post 1.04.2019, 21:31:47
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 1.04.2019

Ostrzeżenie: (0%)
-----




Witam, moj opiekun (domena, server, obsluga itp.) wyemigrowal na zachod i przegapilem oplate domeny, ktora przepadla. Teraz zakupilem nowa i musze zmienic dane w bazie danych z DOMENA1.pl na DOMENA2.pl we wszystkich miejscach gdzie taki zapis wytepuje.

Stad pytanie jak powinna wygladac komenda, ktora to zmienia (jest to najprostsza baza msql ~200MB)?
Go to the top of the page
+Quote Post
trueblue
post 2.04.2019, 06:26:39
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Wyeksportuj zrzut, zmień edytorem, zaimportuj zrzut.


--------------------
Go to the top of the page
+Quote Post
Tomplus
post 2.04.2019, 07:12:50
Post #3





Grupa: Zarejestrowani
Postów: 1 825
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Jak masz dostęp do PHPMYADMIN to jest tam opcja SZUKAJ PO WSZYSTKICH TABELACH.

Prawdopodobnie stara nazwa domeny jest tylko w konkretnych tabelach i kolumnach więc wtedy można wykorzystać zapytanie SQL:

  1. UPDATE `tabelaZkolumnaDOzamiany` SET `kolumnaZblednaDomena` = REPLACE(`kolumnaZblednaDomena` , 'domena1.pl', 'domena2.pl');


Zrób wcześniej kopię zapasową tabeli!!

Ten post edytował Tomplus 2.04.2019, 07:13:13
Go to the top of the page
+Quote Post
spamator12
post 19.04.2019, 04:08:55
Post #4





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 1.04.2019

Ostrzeżenie: (0%)
-----


Dziekuje za zainteresowanie - mam dostep do phpmyadmin! Chcialbym przeleciec przez wszystkie tabele w bazie (cala baza - dla pewnosci). Jest na to jakas komenda? Rozumiem, ze ze wzgledu ze bedzie to dlugo trwac musze zmienic ustawienia mysqla aby pozwalal dluzej mielic baze itp. tak?
Go to the top of the page
+Quote Post
Pyton_000
post 19.04.2019, 08:08:08
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Tyle możliwości a to tylko 1-szy wynik z googla https://stackoverflow.com/questions/1183906...g-a-mysql-query
Go to the top of the page
+Quote Post
spamator12
post 28.04.2019, 03:59:54
Post #6





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 1.04.2019

Ostrzeżenie: (0%)
-----


Chce z autoamtu przejechac po wszystkich tabelach/kolumnach a nie recznie to wpisywac.

Wyciagnalem baze jako txt jak radzono (@trueblue - klik na EXPORT i wybralem select 'Texy! text' jako format) i przejechalem automatem, ale jak to teraz wgrac? Nie moge jej wrzucic (wgrac) z powrotem.

EDIT:

Przy eksporcie jako sql i podmianie nazwy XXX na YYY za pomoca tekstowego edytora wystepuja bledy...

Nie za bardzo wiem czemu - wydaje mi sie ze relacja pomiedzy tabelami/kolumnami jest zachowana - w koncu zmieniam tylko nazwe i ta nazwe zmieniam wszedzie, wiec korelacja powinna byc zachowana...

Ktos ma jakies pomysly? Sa jakies komendy mysql co mi przeleca automatycznie po wszystkich tabelach i zamienia nazwe? Moze zamiana przez mysql zamiast przez edytor tekstowy w czyms pomoze (chodz wydaje sie to nielogiczne ale nie znam sie na bazach danych).

Ten post edytował spamator12 28.04.2019, 04:00:59
Go to the top of the page
+Quote Post
trueblue
post 28.04.2019, 09:50:15
Post #7





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Cytat(spamator12 @ 28.04.2019, 04:59:54 ) *
Przy eksporcie jako sql i podmianie nazwy XXX na YYY za pomoca tekstowego edytora wystepuja bledy...

Przy eksporcie czy imporcie? Jakie błędy?

Cytat(spamator12 @ 28.04.2019, 04:59:54 ) *
Ktos ma jakies pomysly? Sa jakies komendy mysql co mi przeleca automatycznie po wszystkich tabelach i zamienia nazwe? Moze zamiana przez mysql zamiast przez edytor tekstowy w czyms pomoze (chodz wydaje sie to nielogiczne ale nie znam sie na bazach danych).

Pyton_000 podał Ci najbliższe rozwiązanie powyżej.


--------------------
Go to the top of the page
+Quote Post
spamator12
post 28.04.2019, 12:27:17
Post #8





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 1.04.2019

Ostrzeżenie: (0%)
-----


Najpierw eksportuje stara baze, nastepnie zmaieniam nazwy przez edytor tekstowy (replace XXX to YYY) i nastepnie wgrywam baze. Ale to nie dziala - najprawdopodobniej wystepuje gdzies jakas korelacja - w sensie AAA jest kojarzone z XXX i po zmaianie XXX na YYY wystepuje problem - chodz na chlopski rozumn nie powinien.

Zadnych bledow przy eksporcie i imporcie. Bledy pojawiaja sie jak odpalam strone (wyczyscielem wszystkie tabele, ktore mozna bylo wyczyscic - np cache).

Przykladowy blad - "Notice: unserialize(): Error at offset 2080 of 3676 bytes in views_db_object->load_row() (line 2307 of..."

Pomyslalem, ze jak zrobie to przez komendy sql - to moze one sa dokladniejsze albo wprowadzaja jakies dodatkowe modyfikacje i baza zadziala. A w tym linku co podal @Pyton_000 - "If you want to edit from all tables, best way is to take the dump and then find/replace and upload it back." no wiec tak zrobilem. Jest jakas komenda co zmienia WSZYSTKIE tabele w bazie mysql poprzez phpmyadmin?

Nie chcialbym wklepywac komend dla wszystkich tabel (wklepywac ich nazw, wyszukiwac po kilka rekordow w kazdej tabeli). Znacie na to jakis sposob?

EDIT:

Z ciekawosci przeszukalem baze przez phpmyadmin na fraze XXX i znalazl tego duzo. Jednak gdy chce edytowac zawartosc pol, to nie ma tam w polach mozliwosci edycji nazwy XXX (XXX tam nie wystepuje) - moze fraza XXX jest w jakis sposob zakodowana w innej nazwie/postaci i dlatego edytor tego nie zamienil na YYY.

Czyli jezeli XXX w bazie w czesci pol jest zakodowany jako a1a1a1 to edycja poprzez edytor nic nie poradzi, bo trzeba za pomoca tego klucza przekonwertowac YYY na odpowiednik b2b2b2 i wtedy zamienic a1a1a1 na b2b2b2. Ale moze zamiana przez phpmyadmin od razu zrobi to automatycznie - tylko jak zamienic zadana fraze od razu w wszystkich tabelach i kolumnach w danej bazie?

Ten post edytował spamator12 28.04.2019, 13:17:35
Go to the top of the page
+Quote Post
trueblue
post 28.04.2019, 12:53:05
Post #9





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Cytat(spamator12 @ 28.04.2019, 13:27:17 ) *
Przykladowy blad - "Notice: unserialize(): Error at offset 2080 of 3676 bytes in views_db_object->load_row() (line 2307 of..."

Wartości, które zmieniasz są elementem zseralizowanych struktur. Nie wystarczy zmiana samej wartości. Poszukaj wartości w takim stringu i zmienić oprócz niej samej, jej długość. Najpewniej to string w postaci, np.: s:4:"abcd". Tak więc oprócz samego łańcucha "abcd" musisz zmienić również wartość 4 na odpowiadającą długości nowego łańcucha. Po takiej zmianie możesz podmieniać zwykłe wystąpienia (niezserializowane).

Cytat(spamator12 @ 28.04.2019, 13:27:17 ) *
Jest jakas komenda co zmienia WSZYSTKIE tabele w bazie mysql poprzez phpmyadmin?[/b]

Nie chcialbym wklepywac komend dla wszystkich tabel (wklepywac ich nazw, wyszukiwac po kilka rekordow w kazdej tabeli). Znacie na to jakis sposob?

Są tam też inne rozwiązania.



--------------------
Go to the top of the page
+Quote Post
spamator12
post 28.04.2019, 13:35:44
Post #10





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 1.04.2019

Ostrzeżenie: (0%)
-----


Inne rozwiazanie mi nie dzialaja (php 7.3.4).

s:dlugosc stringa:\"nazwa stringa" (oryginal) w bazie nie wystepuje. Wiec nie moge tego zamienic na odpowiednia dlugosc nowego stringa - juz probowalem.

blad

"Notice: unserialize(): Error at offset 2080 of 3676 bytes in views_db_object->load_row() (line 2307 of..."

z tego co widze w bazie kieruje do

('views_db_object', 'class', 'sites/all/modules/views/includes/view.inc', 'views', 10),
czyli
INSERT INTO `registry` (`name`, `type`, `filename`, `module`, `weight`) VALUES

jak podgladam tabele 'registry' to jak mam tam ten offset wyciagnac? - offset 2080 of 3676 bytes

EDIT: dokopalem sie tylko do kodu modulu:

  1. /**
  2.   * Load the object with a row from the database.
  3.   *
  4.   * This method is separate from the constructor in order to give us more
  5.   * flexibility in terms of how the view object is built in different contexts.
  6.   *
  7.   * @param object $data
  8.   * An object from db_fetch_object. It should contain all of the fields
  9.   * that are in the schema.
  10.   */
  11. public function load_row($data) {
  12. $schema = drupal_get_schema($this->db_table);
  13.  
  14. // Go through our schema and build correlations.
  15. foreach ($schema['fields'] as $field => $info) {
  16. $this->$field = empty($info['serialize']) ? $data->$field : unserialize($data->$field);
  17. }
  18. }


Ten post edytował spamator12 28.04.2019, 14:20:41
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.03.2024 - 06:34