json_encode 不返回任何内容

6
我试图将我的MYSQL表数据转换成JSON。我正在尝试使用json_encode()。但是它没有起作用。它没有返回任何内容。我已经检查了控制台,也没有抛出任何错误。我错过了什么?
<?php
    //open connection to mysql db
    $connection = mysqli_connect("localhost","root","","maps") or die("Error " . mysqli_error($connection));

    //fetch table rows from mysql db
    $sql = "select * from locations";
    $result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));

    //create an array
    $emparray[] = array();
    while($row =mysqli_fetch_assoc($result))
    {
        $emparray[] = $row;
    }
    echo json_encode($emparray);

    //close the db connection
    mysqli_close($connection);
?>

您是否已验证查询实际返回了结果? - John Conde
是的,我已经在phpMyAdmin中使用了查询,并且它正在返回结果。 - hhs
但那不是你的代码。确保它在你的代码中返回结果。 - John Conde
你能执行 var_dump($emparray); 并检查结果是否返回任何内容吗? - aimme
@aimme,是的,var_dump()正在返回结果。 - hhs
显示剩余3条评论
5个回答

17

我知道这是老问题了,但是我并没有找到关于这个错误的解释。在我的情况下,问题在于保留带有重音符号的值(Ej: cafetería)到数据库中。var_dump($emparray) 显示了信息,但 echo json_ecode($emparray) 没有显示任何内容。解决方法?

这是我的数据库连接:

$connection = mysqli_connect('ip,'user','pass','dbname') or die("Error " . mysqli_error($connection));

只需要添加正确的字符集:

mysqli_set_charset( $connection, 'utf8');

期望这对其他人也有效。


mysqli_set_charset($connection, 'utf8'); 救了我的命,朋友,谢谢你。 - Weverton Souza
这太棒了! - Christian Meyer
你真的救了我的命! - Psalms Kalu

10

试一试

while ( $row = $result->fetch_assoc() ){
    $emparray[] = json_encode($row);
}
echo json_encode( $emparray );
或者
while($row =mysqli_fetch_assoc($result))
{
   $emparray[] = json_encode($row);
}
echo json_encode($emparray);
$emparray = $result->fetch_all( MYSQLI_ASSOC );
echo json_encode( $emparray );

取代

 while($row =mysqli_fetch_assoc($result))
    {
        $emparray[] = $row;
    }
    echo json_encode($emparray);

1
它可以工作了。非常感谢你的帮助。但是为什么之前它不能工作呢?我哪里出错了? - hhs
wc :) 实际上每一行都被转换成 JSON,然后整体合并在一起。 - aimme

5
添加这行代码即可使其正常工作:
mysqli_set_charset($conn, 'utf8');

2

我曾经遇到过类似的问题(使用PDO),在我的情况下,添加UTF-8设置查询语句可以解决问题,以下是两种方法之一:

$conn->query("SET CHARACTER SET utf8;");

$conn->query("SET collation_connection = utf8_unicode_ci;");

$conn->query("SET CHARACTER SET utf8;"); 对我有效,而$conn->query("SET collation_connection = utf8_unicode_ci;");则无效。 - Hamza Rashid

0

我曾经遇到过类似的问题,但是当我尝试上面的解决方案时,它返回给我一个类似JSON字符串的一维数组而不是二维数组。我通过对每个元素运行$.parseJSON(jQuery)来解决这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接