2013-11-23 104 views
-1

字符集有問題。即時通訊插入俄羅斯信件表中的值時,它看起來像這樣 - Р?ван。字符集,俄語字母的問題

這是我的數據庫連接類。

class Database { 

    public $user = 'root'; 
    public $password = ''; 

    function __construct() { 
     $this->connect(); 
    } 
    function connect() { 
     try { 
      $this->dbh = new PDO('mysql:host=localhost;dbname=university', $this->user, $this->password,array(PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES CP1251')); 
      $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     } catch(PDOException $e) { 
      echo 'ERROR: ' . $e->getMessage(); 
      } 
    } 

    function selectQuery($sql) { 
     $this->stmt = $this->dbh->prepare($sql); 
     $this->stmt->execute(); 
    } 

    function insertQuery($sql) { 
     $this->stmt = $this->dbh->prepare($sql); 
     $this->stmt->execute(); 
    } 
} 

是的,我知道,我沒有準備好發言,虐待後,我解決了這個問題。正如你在db連接中看到的,我寫了array(PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES CP1251')。它修復了從db顯示值的問題(它以相同的方式顯示)。我的SQL是這樣的:

$q = $this->db->insertQuery("INSERT INTO students (id,first_name,second_name,last_name,course) VALUES ('','Иван','Иванян','Иванович','1')"); 

在表其顯示這樣的 - Рванян 我的所有文件都設置UTF-8無BOM?這裏有什麼不對?

編輯:另外,在表中的所有行是utf8_general_ci,因爲你不使用準備好的語句正確

+0

那麼你發送給數據庫的數據是什麼編碼? – deceze

+1

從5.3.6開始,charset是DSN的一部分..同樣,爲什麼你會用模擬的準備?我強烈建議您參考[本教程](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)。哦,你的'Database'類正在泄漏封裝。然後,我仍然不明白爲什麼人們試圖爲PDO製作如此神奇的包裝。 –

+0

特雷斯科,我不確定你在說什麼。 – user3005741

回答

0

你的數據庫類是沒有意義的。甚至不會從選擇查詢中返回任何內容。而這樣的班級整體上沒什麼意義。

Р?ван。是以單字節編碼顯示的utf-8編碼文本。所以,你必須添加

header('Content-Type: text/html; charset=utf-8'); 

到你的PHP文件。

+0

現在它返回 – user3005741

+0

您必須將集名稱更改回utf8 –