PHP PDO DB连接未知字符集

时间:2019-03-06 19:09:14

标签: php mysql pdo phpmyadmin

我对我与PHPmyadmin mysql的PDO连接做错了什么很茫然。我知道这个问题在其他SO文章中已经问过很多遍了,我查了一下,但仍然有问题。我不知道我在做什么错。

这是与我要解决的问题类似的SO文章。

Other SO problem similiar to mine

这是我的配置设置:

MySQL版本::10.1.38-MariaDB-mariadb.org二进制分发版

PHP版本: 5.6.40

服务器字符集: UTF-8 Unicode(utf8)

数据库连接文件:

<?php
session_start();
//error_reporting(E_ERROR | E_PARSE | E_CORE_ERROR);
$dbhost_name = "localhost";
$database = "testdb";
$username = "root";
$charset='utf8mb4';          
$password = "";         


try {
$dbo = new PDO('mysql:host='.$dbhost_name.';dbname='.$database.';charset='.$charset.$username, $password);
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>

在我的config.inc.php中,设置以下规则:

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server=utf8mb4

[client]
default-character-set=utf8mb4

1 个答案:

答案 0 :(得分:1)

字符集变量和用户名变量之间的时间间隔导致无效的字符集。如图所示,PDO构造函数看到的字符集为utf8mb4root。将该时间段更改为逗号以使其符合PDO构造函数的规范,将导致连接按预期工作。

更正后的代码是:

try {
$dbo = new PDO('mysql:host  =' . $dbhost_name .
                  ';dbname  =' . $database    .
                  ';charset =' . $charset     ,  // this was a period, needed to be a comma
                                 $username    ,
                                 $password);
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}