这是我的PDO类(class)的一部分。我需要为希伯来语使用utf-8
,但是当我将ATTR_PERSISTENT
设置为true
时,输出文本将显示为??????
。如果我将ATTR_PERSISTENT
切换为false
,则输出将正确。
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();
}
}
之间是否有任何冲突:
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
和:
PDO::ATTR_PERSISTENT => true
最佳答案
我可以找到答案here。
在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();
}
}
现在输出正确。
关于PHP PDO,连接持久后无法设置名称吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32830149/