用于编码JSON中的数据库数据的PHP代码无效

时间:2015-08-30 21:30:54

标签: php json

我目前坚持使用一些PHP代码。我想访问我的数据库中的表并以JSON格式检索数据。因此,我尝试了以下代码:

<?php

$con = mysqli_connect("......","username","pwd","DBName");

if (mysqli_connect_errno())
{
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql = "SELECT * FROM users";

if ($result = mysql_query($con, $sql))
{

    $resultArray = array();
    $tempArray = array();    

    while($row = $result->fetch_object())
    {
        $tempArray = $row;
        array_push($resultArray, $tempArray);
    }

    echo json_encode($resultArray);
}

mysqli_close($con);
?>

然而,它让我得到一个空白页面。它曾经工作过一次,但只有表格中有一个特殊数量的行,所以效率不如你想象的那么高。

有没有人知道为什么我会得到那些奇怪的结果?

编辑1:

我只是想把它添加到我的代码中:

echo json_encode($resultArray);
echo json_last_error();

它还给了我5.这似乎是我表中数据编码的错误。因此我添加了该代码:

$tempArray = array_map('utf8_encode', $row)
array_push($resultArray, $tempArray);

我得到以下输出:[null,null,null] 0(零来自echo json_last_error();)

所以我在这里,有人可以帮助我吗?

4 个答案:

答案 0 :(得分:1)

我首先将if ($result = mysql_query($con, $sql))更改为if ($result = mysqli_query($con, $sql)),因为它们是不同的数据库扩展

另一件事是将while($row = $result->fetch_object())更改为while ($row = mysqli_fetch_object($result)) {(程序风格与面向对象的风格)

如果您仍然看到空白屏幕,请尝试在脚本顶部添加error_reporting(E_ALL);,然后您就能确切知道错误的位置

答案 1 :(得分:0)

[arg...]

答案 2 :(得分:0)

这段代码适合我,试试看:

<?php
$con = mysqli_connect("......","username","pwd","DBName");

if (mysqli_connect_errno())
{
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql = "SELECT * FROM users";

if ($result = mysqli_query($con, $sql))
{

    while($row = $result->fetch_object())
    {
        $resultArray[] = $row;
    }

    echo json_encode($resultArray);
}

mysqli_close($con);
?>

编辑1:

作为测试替换此代码:

 while($row = $result->fetch_object())
 {
  $resultArray[] = $row;
 }
 echo json_encode($resultArray);

使用此代码:

 while($row = $result->fetch_assoc())
 {
  print_r($row);
 }

你得到什么输出?

答案 3 :(得分:0)

我终于找到了解决方案!这确实是一个编码问题,json_encode()函数只接受在utf8中编码的字符串。我将我的表的interclassement更改为utf8_general_ci,并修改了我的代码如下:

<?php
//Create Database connection

$db = mysql_connect(".....","username","pwd");

if (!$db) {

    die('Could not connect to db: ' . mysql_error());

}


//Select the Database

mysql_select_db("DBName",$db);



//Replace * in the query with the column names.

$result = mysql_query("SELECT * FROM users", $db); 


//Create an array

$json_response = array();


while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

    $row_array['id'] = $row['id'];
    $row_array['name'] = utf8_encode($row['name']);
    $row_array['lastName'] = utf8_encode($row['lastName']);

    //push the values in the array

    array_push($json_response,$row_array);

}

echo json_encode($json_response);
//Close the database connection

fclose($db);

?>

我得到了预期的输出。