查询Json:使用不同的名称返回每列两次

时间:2015-07-21 02:45:34

标签: php mysql json

我有这个PHP代码来获取所有用户在所有月份存入的所有付款(付款金额,用户名,付款月份):

$result = $mysqli->query("SELECT p.id as id, p.amount as amount, 
                          u.name as user_id, m.name as month_id 
                          FROM payment p, user u, month m 
                          WHERE p.user_id = u.id AND p.month_id = m.id;");   

//Add all records to an array
$rows = array();
while($row = $result->fetch_array())
{
    $rows[] = $row;
}

//Return result
$jTableResult = array();
$jTableResult['Result'] = "OK";
$jTableResult['Records'] = $rows;
print json_encode($jTableResult);

这是我得到的json:

[{
  "Result": "OK",
  "Records": [
    {
      "0": "1",
      "id": "1",
      "1": "250",
      "amount": "250",
      "2": "user 1",
      "user_id": "user 1",
      "3": "jan 15",
      "month_id": "jan 15"
    },
...]

现在,我认为这些"0", "1", "2", "3"名称/值不应该存在,我必须在这里做错了。这是json_encode()的做法吗?或者这是我查询数据库的方式?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这里的问题是您正在调用fetch_array()。

fetch_array()将返回基于索引的值数组以及基于键的值。因此,如果您只想在数组中使用基于键(名称)的值,请使用以下代码。

尝试fetch_assoc()。

$rows = array();
while($row = $result->fetch_assoc())
{
    $rows[] = $row;
}

或fetch_array(MYSQLI_ASSOC)

$rows = array();
while($row = $result->fetch_array(MYSQLI_ASSOC))
{
   $rows[] = $row;
}