这是我的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/

10-13 05:09
查看更多