我在php代码中使用mysqli
来连接数据库,我喜欢它的OOP功能。
数据库包含Persian
语言的数据,排序规则设置为utf8_persian_ci
。
创建连接后,charset
设置为utf8
:
<?php
class DBHandler {
private $DB_HOST = "localhost"; //localhost
private $DB_USER = "------"; //root
private $DB_PASS = "------"; // ""
private $DB_NAME = "------"; //test
private $mysqli;
private $username;
public function __construct($user) {
$this->username = $user;
// CONNECT TO THE DATABASE
$this->mysqli = new mysqli($this->DB_HOST, $this->DB_USER, $this->DB_PASS, $this->DB_NAME);
if (mysqli_connect_errno()) {
throw new Exception("Unable to connect to the database. Error number: " . $this->mysqli->connect_errno);
}
$this->mysqli->set_charset("uft8");
}
public function __destruct() {
//We are done with the database. Close the connection handle.
$this->mysqli->close();
}
}
我希望以正确的编码检索数据,但在查询数据库后,所有字符都转为?
。
我只是用mysqli
函数替换了所有mysql
个实例,一切正常。
我想知道造成这种情况的原因是什么以及如何使用mysqli
函数并以正确的编码方式获取数据?
答案 0 :(得分:2)
首先:不推荐使用mysql扩展。你最好坚持使用mysqli,或者改用PDO。
您对问号(钻石?)的评价不一定是数据库问题。你的脚本可能使用了错误的编码。很多人有钻石的东西,and it can be solved with a single line of code。
header('Content-Type: text/html; charset=utf-8');