Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]PDO brak polskich znaków
Forum PHP.pl > Forum > Przedszkole
Szymciosek
Witam,
mam stworzoną bazę każde kodowanie ustawione na UTF-8 GENERAL CI, przy wstawianiu rekordu do bazy bez problemu mogę dodać "Witaj świecie" i wszystkie znaki są poprawnie wyświetlane.

Lecz problem zaczyna się od miejsca ustawiania i wysyłania poprzez PDO.

Przekazuję do metody kolejne wartości: 1, Witaj świecie
  1. public function addEntryQuery($user_id, $content)
  2. {
  3. echo $content; //Witaj świecie
  4.  
  5. $query = self::$PDOInstance->prepare("INSERT INTO `contents` (`id`, `user_id`, `content`) VALUES ('', :user_id, :content)");
  6. $query->bindValue(":user_id", $user_id);
  7. $query->bindValue(":content", $content);
  8.  
  9. $query->execute();
  10. }


Niestety, to co otrzymuję w bazie to "Witaj " czyli ucina mi od polskiego znaku...

Następna opcja:
  1. $query = self::$PDOInstance->prepare("INSERT INTO `contents` (`id`, `user_id`, `content`) VALUES ('', 1, '$content')");

Też działa tak samo.

Lecz, gdy zrobię w ten sposób:
  1. $query = self::$PDOInstance->prepare("INSERT INTO `contents` (`id`, `user_id`, `content`) VALUES ('', 1, 'Witaj świecie')");

Wszystko działa jak należy.


Próbowałem już z SET NAMES... lecz nie działa.
Jak widać $content zwraca to co powinien z formularza.

W czym jeszcze może być problem ?
Szymciosek
  1. class Connect
  2. {
  3. private static $PDOInstance;
  4.  
  5. public $isReady;
  6.  
  7. public function __construct()
  8. {
  9. if(!self::$PDOInstance) {
  10. try
  11. {
  12. self::$PDOInstance = new PDO('mysql:host=localhost; dbname=accept_system', 'root', '');
  13. self::$PDOInstance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  14.  
  15. }
  16. catch (PDOException $e)
  17. {
  18. die('PDO CONNECTION ERROR: ' . $e->getMessage() . '<br/>');
  19. }
  20. }
  21. self::$PDOInstance->exec("SET NAMES utf8");
  22. return self::$PDOInstance;
  23. }
  24.  
  25. ....
  26.  
  27. public function addEntryQuery($user_id, $content)
  28. {
  29. echo $content;
  30.  
  31. $query = self::$PDOInstance->prepare("INSERT INTO `contents` (`id`, `user_id`, `content`) VALUES ('', :user_id, :content)");
  32. $query->bindValue(":user_id", $user_id);
  33. $query->bindValue(":content", $content);
  34.  
  35. $query->execute();
  36. }


Niestety ani
Kod
exec(...)

ani
Kod
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"


Nie chce tu działać.
CuteOne
"mysql:host=$host;dbname=$db;charset=utf8"
Szymciosek
  1. self::$PDOInstance = new PDO("mysql:host=localhost; dbname=accept_system; charset=utf8", 'root', '');


Nadal to samo. Może kodowanie pliku php też ma coś do tego ? Tzn chodzi mi o znaczniki meta... chociaż w tym miejscu, gdzie powinno się dodawać do bazy
  1. echo $content;

Wyświetla to bardzo dobrze.

Rozwiązane.
Dodanie znacznika meta na górze pliku addEntry.php rozwiązało problem.
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.