微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐