php – 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");
}
?>

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

解决方法:

这个:

$db->setAttribute(PDO::MysqL_ATTR_INIT_COMMAND, 'SET NAMES utf8');

完全没有意义.请参见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'))

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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...