Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Błąd funkcji unserialize, Error at offset po imporcie danych do bazy, Działa w tabeli przed importem, przestaje po imporcie do innej tabeli
adbacz
post
Post #1





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Mam zapisaną tablicę elementów i zserializowaną a następnie zapisaną do bazy danych w kolumnie o typie 'text'. Eksport danych działa bez zarzutu i import do innej tak samo, ale gdy chcę odczytać dane z tej kolumny, to dostaję błąd funkcji unserialize:

Kod
unserialize() [function.unserialize]: Error at offset 82 of 408 bytes


A tak wygląda zserializowana treść:

Kod
a:2:{s:11:"firstColumn";a:4:{i:0;s:43:"Application\Back\Components\Trigocms\Module";i:1;s:47:"Application\Back\Components\Publications\Module";i:2;s:43:"Application\Back\Components\Products\Module";i:3;s:0:"";}s:12:"secondColumn";a:4:{i:0;s:50:"Application\Back\Components\TrigocmsUpdates\Module";i:1;s:53:"Application\Back\Components\AdminNotifications\Module";i:2;s:45:"Application\Back\Components\Statistics\Module";i:3;s:0:"";}}


Operacje importy i eksportu sa dokonywane na systemie Windows XP poprzez phpMyAdmin, na tym samym komputerze i serwerze WAMP.

Co może być powodem takiego błędu?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 18)
Pyton_000
post
Post #2





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

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


pokaż kod
Go to the top of the page
+Quote Post
adbacz
post
Post #3





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Którą część kodu? Zapis do bazy, pobieranie z bazy, wywolanie funkcji unserialize()?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





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

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


pobieranie i deserializacja,
poza tym zobacz co jest pobrane z DB (np var_dump) i treść tego wklej
Go to the top of the page
+Quote Post
adbacz
post
Post #5





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Pobieranie za pomocą PDO z DB zapytaniem

  1. SELECT * FROM #__user WHERE id = '1' LIMIT 1


A później deserializacja

  1. $result = @unserialize($user['admin_dashboard_modules_positions']);
  2. return is_array($result) ? $result : array();


Rezultat var_dump

Kod
string 'a:2:{s:11:"firstColumn";a:4:{i:0;s:43:"Application\Back\Components\Trigocms\Module";i:1;s:47:"Application\Back\Components\Publications\Module";i:2;s:43:"Application\Back\Components\Products\Module";i:3;s:0:"";}s:12:"secondColumn";a:4:{i:0;s:50:"Application\Back\Components\TrigocmsUpdates\Module";i:1;s:53:"Application\Back\Components\AdminNotifications\Module";i:2;s:45:"Application\Back\Components\Statistics\Module";i:3;s:0:"";}}' (length=432)
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A mi unserialize na tekscie co podales dziala prawidlowo.

Pokaz z czego robisz var_dump()


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
adbacz
post
Post #7





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Z czego robię, to znaczy?

var_dump() wyglądał tak:

  1. var_dump($user['admin_dashboard_modules_positions']);
  2. $result = @unserialize($user['admin_dashboard_modules_positions']);
  3. return is_array($result) ? $result : array();


A mógłbyś spróbować z tymi danymi, które podałem w pierwszym poście i zrobić dokładnie w ten sam sposób jak zrobiłem ja?

Ten post edytował adbacz 3.03.2014, 14:13:09
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




bez zmian, wszystko dziala


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
adbacz
post
Post #9





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


To dziwne. Ta operacja u mnie zawsze wygląda w ten sam sposób, że po eksporcie z jednej bazy i imporcie do innej (nawet na innym serwerze) zawsze się psuje. Już próbowałem importować na hosting w nazwa.pl i home.pl, i tam jest tak samo - po imporcie mam błąd funkcji unserilize().

W jaki sposób robisz import i eksport jeśli można wiedzieć?
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie robie importow/eksportow bo nie potrzebuje smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post
Post #11





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Jeżeli operujesz na obiektach, a nie wiem co z tym dalej robisz, to żeby wypełnić jakiś obiekt musi być on wcześniej utworzony. Może być też nieaktywne połączenie z bazą. Może być tam też jakiś problem z null przy unserialize.


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@viking naprawde myslisz za ja lokalnie mam obiekty ktore on tworzy? wink.gif
podpowiedz: nie, nie mam, a dziala

poza tym widac tu wyraznie, ze nie ma mowy o zadnych obiektach a jedynie o tekstach


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post
Post #13





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Raczej pisałem do autora żeby zwrócił na to uwagę smile.gif
Jeszcze mi przychodzi do głowy magic_quotes i problem ze slashami.


--------------------
Go to the top of the page
+Quote Post
adbacz
post
Post #14





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


@nospor - skoro nie robisz importu-eksportu to będzie działać, już tak sprawdzałem. Błąd pojawia się tylko podczas eksportu z bazy danych i importu do drugiej i dopiero po imporcie pobieranie i odserializowanie. Bez tego błąd nie wyskakuje.

@viking - Mógłbyś napisać czym sie sugerowałeś pisząc o obiektach? Nigdzie tutaj wyżej nie ma nic o obiektach, nawet w kodzie, który przekleiłem.
Go to the top of the page
+Quote Post
IProSoft
post
Post #15





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


Pokaż jak wygląda treść zserializowana:

Kod
a:2:{s:11:"firstColumn";a:4:{i:0;s:43:"Application\Back\Components\Trigocms\Module";i:1;s:47:"Application\Back\Components\Publications\Module";i:2;s:43:"Application\Back\Components\Products\Module";i:3;s:0:"";}s:12:"secondColumn";a:4:{i:0;s:50:"Application\Back\Components\TrigocmsUpdates\Module";i:1;s:53:"Application\Back\Components\AdminNotifications\Module";i:2;s:45:"Application\Back\Components\Statistics\Module";i:3;s:0:"";}}


ale już po imporcie do nowej tabeli, jakich znaków brakuje / zostały dodane podczas importu do nowej tabeli.


--------------------
Manual prawdę Ci powie.
Go to the top of the page
+Quote Post
com
post
Post #16





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


http://stackoverflow.com/questions/1015290...error-at-offset
Go to the top of the page
+Quote Post
adbacz
post
Post #17





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Tablica, którą serializuje:
  1. $result = array
  2. (
  3. 'firstColumn' => Array
  4. (
  5. 'Application\Back\Components\CMS\Module',
  6. 'Application\Back\Components\Publications\Module'
  7. ),
  8.  
  9. 'secondColumn' => Array
  10. (
  11. 'Application\Back\Components\AdminNotifications\Module',
  12. 'Application\Back\Components\Updates\Module',
  13. 'Application\Back\Components\Statistics\Module',
  14. 'Application\Back\Components\Backup\Module'
  15. )
  16.  
  17. )


1. Serializacja i zapis do DB
2. Eksport bazy do pliku
3. Import bazy z pliku do innej bazy
4. Pobranie danych z DB
5. Odserializowanie danych
Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Wydaje mi sie ze mogą psuc \ - to są znaki specjalne i powinno raczej byc tak:
'Application\\Back\\Components\\CMS\\Module',
Analogicznie reszta


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
adbacz
post
Post #19





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Możliwe, że tak. Nie wziąłem tego pod uwagę.

Rozwiązałem to w ten sposób, że serializowaną tablicę wrzucam jeszcze w BASE64 i dopiero do DB. W tedy błędu nie ma.

Dziękuje za pomoc Panowie.
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 Aktualny czas: 20.08.2025 - 10:33