Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PDO] Kodowanie znaków
rav1989
post 2.07.2011, 16:01:42
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.07.2007

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


Witam

Mam drobny problem z kodowaniem polskich znaków przy zapisywaniu do bazy danych... korzystam z PDO do obsługi bazy.

Gdy dodam wpis na stronie mi się on ładnie wyświetli (tak jak trzeba) natomiast jak podejrzę ten tekst w phpMyAdmin to mam niezłą sieczkę...

dla przykładu dodaję ó€ęłśąńćźż ÓĘŁŚĄŃĆŹŻ a w badzie mi zapisuje ó€ęłśąńćźż ÓĘŁŚĄŃĆŹŻ
metoda porównywania to utf8_general_ci natomiast wszystkie pliki są w UTF-8 bez BOM tak samo jak strona biggrin.gif

Niby nic wielkiego bo strona działa normalnie ale jednak chciałbym aby w bazie też był ten sam tekst co na stronie bez krzaków...

Pozdrawiam
Rav
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
toaspzoo
post 2.07.2011, 16:25:47
Post #2





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


daj pliki w iso8859-2

lub nagłówek na stronie, przez którą dodajesz header() z utf-8


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

LS Easter egg <
Go to the top of the page
+Quote Post
rav1989
post 2.07.2011, 17:04:48
Post #3





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.07.2007

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


Cytat(toaspzoo @ 2.07.2011, 17:25:47 ) *
daj pliki w iso8859-2

lub nagłówek na stronie, przez którą dodajesz header() z utf-8

Pierwsze sprawiło, że i w bazie i na stronie pojawiły się krzaki, natomiast druga opcja w ogóle nie dała efektu...
Go to the top of the page
+Quote Post
morbic
post 2.07.2011, 17:07:48
Post #4





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

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


Powinieneś bezpośrednio po połączeniu się do bazy ustawić sposób kodowania przy połączeniu - nie wiadomo, jaki jest domyślny w MySQL. To, że phpMyAdmin używa UTF8 nic nie znaczy. Bardziej tu szukałbym problemu.

Możesz to zrobić na dwa sposoby:
  1. $pdo = new PDO('mysql:host=localhost;dbname=test', 'test', 'test', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

lub
  1. $pdo = new PDO('mysql:host=localhost;dbname=test', 'test', 'test');
  2. $dbh->exec("SET NAMES utf8");


Musisz jednak liczyć się z tym, że w momencie zmiany kodowania przy połączeniu, wszystkie wyświetlane do tej pory poprawnie dane zaczną pokazywać się na stronie tak samo, jak wyświetla je phpMyAdmin. Z kolei nowe, dodawane przez skrypt dane będą już zapisywane poprawnie.

Ten post edytował morbic 2.07.2011, 17:09:21


--------------------
"Aby zrozumieć rekurencję, musisz najpierw zrozumieć rekurencję."
Go to the top of the page
+Quote Post
rav1989
post 2.07.2011, 17:31:41
Post #5





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.07.2007

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


Cytat(morbic @ 2.07.2011, 18:07:48 ) *
Powinieneś bezpośrednio po połączeniu się do bazy ustawić sposób kodowania przy połączeniu - nie wiadomo, jaki jest domyślny w MySQL. To, że phpMyAdmin używa UTF8 nic nie znaczy. Bardziej tu szukałbym problemu.

Możesz to zrobić na dwa sposoby:
  1. $pdo = new PDO('mysql:host=localhost;dbname=test', 'test', 'test', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

lub
  1. $pdo = new PDO('mysql:host=localhost;dbname=test', 'test', 'test');
  2. $dbh->exec("SET NAMES utf8");


Musisz jednak liczyć się z tym, że w momencie zmiany kodowania przy połączeniu, wszystkie wyświetlane do tej pory poprawnie dane zaczną pokazywać się na stronie tak samo, jak wyświetla je phpMyAdmin. Z kolei nowe, dodawane przez skrypt dane będą już zapisywane poprawnie.


Zrobiłem to pierwsze ale wyskoczył mi błąd...

Cytat
Fatal error: Undefined class constant 'MYSQL_ATTR_INIT_COMMAND' in C:\wamp\www\config.php on line 23
Go to the top of the page
+Quote Post
morbic
post 2.07.2011, 18:05:13
Post #6





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

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


Jakiej wersji PHP używasz? W 5.2 działa bez zarzutu, ale w 5.3 ta opcja magicznie zniknęła.

Najbezpieczniej używać sposobu drugiego.


--------------------
"Aby zrozumieć rekurencję, musisz najpierw zrozumieć rekurencję."
Go to the top of the page
+Quote Post
rav1989
post 2.07.2011, 18:25:28
Post #7





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 5.07.2007

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


Cytat(morbic @ 2.07.2011, 19:05:13 ) *
Jakiej wersji PHP używasz? W 5.2 działa bez zarzutu, ale w 5.3 ta opcja magicznie zniknęła.

Najbezpieczniej używać sposobu drugiego.

No i właśnie działa ten drugi bez zarzutu
Serdecznie dziękuję za pomoc smile.gif
Go to the top of the page
+Quote Post
Fifi209
post 2.07.2011, 20:36:59
Post #8





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Cytat(morbic @ 2.07.2011, 19:05:13 ) *
Jakiej wersji PHP używasz? W 5.2 działa bez zarzutu, ale w 5.3 ta opcja magicznie zniknęła.

Dziwne, w dokumentacji nadal jest
http://pl2.php.net/manual/en/ref.pdo-mysql.php


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
morbic
post 2.07.2011, 21:09:28
Post #9





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

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


Źle się wyraziłem, ogólnie nie zniknęła. Wygląda to na bug w którejś z wersji PHP, który został później poprawiony.

https://bugs.php.net/bug.php?id=47224


--------------------
"Aby zrozumieć rekurencję, musisz najpierw zrozumieć rekurencję."
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: 24.07.2025 - 17:04