PHP PDO DB连接未知字符集

问题描述 投票:0回答:1

我对我与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
php mysql pdo phpmyadmin
1个回答
1
投票

charset变量和用户名变量之间的时间段导致无效的字符集。如图所示,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();
}
© www.soinside.com 2019 - 2024. All rights reserved.