2015-09-28 24 views
5

To jest część mojej lekcji PDO. Muszę użyć języka utf-8 dla języka hebrajskiego, ale gdy ustawię ATTR_PERSISTENT na true, tekst wyjściowy będzie wyświetlany jako ??????. Jeśli przełączę ATTR_PERSISTENT na false, wynik będzie prawidłowy.PHP PDO, Nie można ustawić nazwy, gdy połączenie jest trwałe?

public function __construct() { 
    // Set DSN 
    $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname; 
    // Set options 
    $options = array(
     PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', 
     PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 
     PDO::ATTR_PERSISTENT => true 
    ); 
    // Create a new PDO instanace 
    try { 
     $this->dbh = new PDO($dsn, $this->user, $this->pass, $options); 
    } 
    // Catch any errors 
    catch (PDOException $e) { 
     $this->error = $e->getMessage(); 
    } 
} 

Czy istnieje konflikt pomiędzy:

PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' 

oraz:

PDO::ATTR_PERSISTENT => true 
+0

Jaki jest typ pliku kodowania? – rray

+0

@rray It's utf-8 –

+0

Co ciekawe, jest to, że było [zadawane wcześniej] (http://stackoverflow.com/questions/29714253/pdoattr-persistent-utf-8-encoding) i nie przyciągnęły prawie żadnej uwagi. –

Odpowiedz

2

mogłem znaleźć odpowiedź here.

Ustawienie go w DSN to jedyna właściwa droga, więc zmieniłem kod do tego:

public function __construct() { 
     // Set DSN 
     $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname .';charset=utf8'; 
     // Set options 
     $options = array(
      //PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", 
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 
      PDO::ATTR_PERSISTENT => true 
     ); 
     // Create a new PDO instanace 
     try { 
      $this->dbh = new PDO($dsn, $this->user, $this->pass, $options); 
     } 
     // Catch any errors 
     catch (PDOException $e) { 
      $this->error = $e->getMessage(); 
     } 
    } 

A teraz wyjście ma rację.

+0

Cieszę się, że pomogło :) –