我对我与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
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();
}