我有一个奇怪的问题。我有一个简单的PHP脚本,它使用PDO从数据库中获取所有国家/地区,然后将结果返回为json。当我使用fetch函数而不是fetchAll时,一切都按预期工作。当我print_r时,数据就在那里。
不起作用:
$sql = "SELECT * FROM countries";
if($stmt = $_db->prepare($sql))
{
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt->closeCursor();
header("content-type:application/json");
echo json_encode($data);
exit();
}
作品:
$sql = "SELECT * FROM countries";
if($stmt = $_db->prepare($sql))
{
$stmt->execute();
$data = $stmt->fetch(PDO::FETCH_ASSOC);
$stmt->closeCursor();
header("content-type:application/json");
echo json_encode($data);
exit();
}
print_r的结果:
Array
(
[0] => Array
(
[id] => 1
[name] => Afghanistan
)
[1] => Array
(
[id] => 2
[name] => Åland Islands
)
[2] => Array
(
[id] => 3
[name] => Albania
)
....
[248] => Array
(
[id] => 249
[name] => Zimbabwe
)
)
1
答案 0 :(得分:5)
试
$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
使用:
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
答案 1 :(得分:4)
当您遇到JSON问题时,有一个函数json_error()
。
在得知编码存在问题后,告诉您的数据库返回utf8
中的数据:
$_db->query("SET NAMES utf8");
$data = $_db->query("SELECT * FROM countries")->fetchAll(PDO::FETCH_ASSOC);
header("content-type:application/json");
echo json_encode($data);
exit();
答案 2 :(得分:1)
尝试在PDO初始化时设置charset,如此
$_db = new PDO("mysql:host=$host;dbname=$dbname;charset=UTF8;", $dbuser, $dbpass);
请注意charset=UTF8;
答案 3 :(得分:-1)