2015-09-28 7 views
5

これは私のPDOクラスの一部です。ヘブライ語でutf-8を使用する必要がありますが、ATTR_PERSISTENTtrueに設定すると、出力テキストは??????のように表示されます。ATTR_PERSISTENTfalseに切り替えると出力が正しくなります。PHP PDO、接続は永続的ですが名前を設定できませんか?

PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' 

そして:

PDO::ATTR_PERSISTENT => true 
+0

ファイルのエンコードの種類は何ですか? – rray

+0

@rrayそれはutf-8 –

+0

好奇心が強いです、それは[以前に尋ねられた](http://stackoverflow.com/questions/29714253/pdoattr-persistent-utf-8-encoding)、ほとんど注目を集めていないということです。 –

答えて

2

私は答えhereを見つけることができる

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(); 
    } 
} 

間に矛盾があります。 DSNでそれを設定

は唯一の適切な方法であるので、私はこれにコードを変更:

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(); 
     } 
    } 

そして今、出力は正しいです。

+0

助けてくれてうれしいです:) –

関連する問題