PHP Json Encode PDO::FETCH_ASSOC

12 浏览
0 Comments

PHP Json Encode PDO::FETCH_ASSOC

我试图从我的MSSQL数据库表中返回所有行,并将它们以JSON_ENCODE的形式输出。

当我使用这个方法并echo $json时,页面是空白的。当我对这个变量进行var_dump时,得到的是一个布尔值,false。

$sth = $db->prepare("SELECT * FROM dbo.Devices");
$sth->execute();
$array = $sth->fetchAll(PDO::FETCH_ASSOC);
$json = json_encode($array);

然而,如果我将相同的fetchAll放入一个result变量并打印它,它可以正常工作!

使用print函数工作正常。
$result = $sth->FetchAll();
print_r($result);

我读到其他人遇到类似的问题,并且说这是一个UTF8编码的问题,所以我尝试在json_encode之前对$array进行utf8_encode,但结果是相同的空白页面。有人能解释一下吗?

0
0 Comments

PHP中的`json_encode`函数对字符编码是敏感的,如果无法处理编码,它会失败。而`print_r`函数则不是这样,它会愉快地打印出你给它的任何内容。

如果你的源数据中的字符串编码为ISO-8859-1,那么使用`utf8_encode`函数修复可能会起作用。确保按照以下方式使用它:[https://stackoverflow.com/a/2790107/111755](https://stackoverflow.com/a/2790107/111755)

这个问题出现的原因是`json_encode`函数无法处理特定的字符编码,而`print_r`函数可以。解决方法是使用`utf8_encode`函数对源数据中的字符串进行编码修复。

0