PDO UTF-8编码问题?

Moh*_*ian 1 php mysql pdo utf-8

我正在使用PDO连接到MYSQL数据库

数据库中的所有表都有utf8_unicode_ci排序规则

这是我的连接代码:

<?php
$mysql_username = "root";
$mysql_password = "";
$mysql_host = "localhost";
$mysql_database = "cms";

try
{
    //connect
    global $db;
    $db = new PDO('mysql:dbname=' . $mysql_database . ';host=' . $mysql_host . ';charset=utf8;', $mysql_username, $mysql_password);
    $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8');
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $ex)
{
    die("Unable Connect To DataBase");
}
?>
Run Code Online (Sandbox Code Playgroud)

在localhost我没有编码的问题,但当我上传源到主机我看到?????? 而不是字符?

dec*_*eze 26

这个:

$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8');
Run Code Online (Sandbox Code Playgroud)

完全没有意义.请参见http://php.net/manual/en/ref.pdo-mysql.php.在MYSQL_ATTR_INIT_COMMAND建立连接之后立即执行.如果你在一个已经完全创建的PDO对象上设置它,那就太晚了,它永远不会执行.您需要将它传递给构造函数:

new PDO(..., ..., ..., array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'))
Run Code Online (Sandbox Code Playgroud)

或者,如果您的PHP版本支持它,请添加charset=utf8到DSN.