用于编码JSON中的DB数据的PHP代码不起作用

I'm currently stuck with some PHP code. I want to access a table in my database and retrieve the data in a JSON format. Therefore, I tried the following code :

<?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);
?>

However, it's getting me an empty page. It worked once but only with a special number of row in the table, so not very efficient as you might guess.

Does anybody have an idea why i'm getting those weird results?

EDIT 1 :

I Just tried to add this to my code :

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

And it's returning me 5. It seems to be an error from the data encoding in my table. Therefore I added that code :

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

And I got the following output : [null,null,null]0 (The zero comes from the echo json_last_error();)

So here I am, can anybody help me with this ?

I finally found a solution ! That was indeed an encoding problem, the json_encode() function accepts only strings encoded in utf8. I changed the interclassement of my table to utf8_general_ci and I modified my code as follows :

<?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);

?>

And I got the expected output.

I would start by changing if ($result = mysql_query($con, $sql)) to if ($result = mysqli_query($con, $sql)) because they are different database extensions

Another thing would be to change while($row = $result->fetch_object()) to while ($row = mysqli_fetch_object($result)) { (Procedural style vs. Object oriented style)

If you still see blank screen, try adding error_reporting(E_ALL); at the top of your script, and you'll be able to know exactly where the bug is

<?php

$con = mysqli_connect("......","username","pwd","DBName") 
       or die("Failed to connect to MySQL: " . mysqli_connect_error());

$sql = "SELECT * FROM users";
$query = mysqli_query($con, $sql) or die ("Failed to execute query")
if ($result = $query)
{
    $resultArray = array();
    while($row = $result->fetch_object())
    {
        array_push($resultArray, $row);
    }
    $result->close()

    echo json_encode($resultArray);
}

mysqli_close($con);
?>

This code works for me, try it out:

<?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);
?>

EDIT 1:

As a test replace this code:

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

with this code:

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

What output do you get?