从mysql数据库

时间:2018-09-08 09:03:58

标签: php mysql database

我正在使用PHP 7.1.8,并且正在尝试查询数据库。但是,序列化的数组具有特殊字符,如下所示:

在下面找到我的代码示例:

// connect to db
$dbname = $conf['dbName'];
$dbuser = $conf['user'];
$dbpass = $conf['pwd'];
$dbhost = $conf['host'];

// Create connection
$conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname);

$arr = $conn->query("SELECT * FROM postmeta WHERE post_id = "100" and meta_key = 'val' LIMIT 1;")->fetch_assoc()["meta_value"];

直接查询数据库时,我得到了的正确值。见下面我的``$ arr`:

enter image description here

此错误基本上导致我无法正确unserialize数据。

任何建议如何解决此错误?

感谢您的答复!

2 个答案:

答案 0 :(得分:2)

问题在于整理。您的MySQL返回的是当前编码不支持的特定符号(温度符号)。

尝试在选择之前立即执行此查询: set names 'utf8';

此外,如果您以某种HTML响应形式显示此数据,请不要忘记将charset=UTF-8添加到Content-type的元标记中。

答案 1 :(得分:1)

$conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
/* change character set to utf8 */
if (!$conn->set_charset("utf8")) {
    printf("Error loading character set utf8: %s\n", $conn->error);
    exit();
} else {
    printf("Current character set: %s\n", $conn->character_set_name());
}
$arr = $conn->query("SELECT * FROM postmeta WHERE post_id = "100" and meta_key = 'val' LIMIT 1;")->fetch_assoc()["meta_value"];

请检查输出。