charset,俄语字母的问题

时间:2013-11-23 11:54:59

标签: php oop pdo character-encoding

我遇到charset问题。当我用俄语字母将值插入表格时,它看起来像这样 - Р?ван。

这是我的数据库连接类。

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 connection中看到的那样,我写了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

1 个答案:

答案 0 :(得分:0)

您的数据库类没有意义,因为您没有正确使用预准备语句。甚至不从select查询中返回任何内容。这样的课程整体上没什么意义。

Р?ван。是utf-8编码的文本,显示为单字节编码。所以,你必须添加

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

到你的PHP文件。