mysqli_fetch_assoc到json编码的数组对大多数查询有效,但对其他查询无效(尽管查询返回有效结果)

时间:2018-12-08 23:30:44

标签: php mysql json xmlhttprequest

所以这是代码:

if ($fetch = mysqli_fetch_array($result0)) {
  //Found a company - now show all maintenances for company
  $company_id = $fetch[0];
  $result = mysqli_query($dbhandle, "SELECT maintenancedb.maileingang, maintenancedb.bearbeitetvon, maintenancedb.startDateTime, maintenancedb.done, maintenancedb.id FROM maintenancedb WHERE maintenancedb.lieferant LIKE '$company_id'") or die(mysqli_error($dbhandle));

  if ($resultsrows = mysqli_fetch_assoc($result)) {
    $array2 = array();

    while ($resultsrows = mysqli_fetch_assoc($result)) {
      $array2[] = $resultsrows;
      //var_dump($resultsrows);
    }
    echo json_encode($array2);
  }else {
    $jsonArrayObject = array(array('maileingang' => 'no maintenances for this lieferant in system.', 'bearbeitetvon' => '', 'startDateTime' => '', 'done' => '', 'id' => ''));
    echo json_encode($jsonArrayObject);
  }
} else {
  $jsonArrayObject = array(array('maileingang' => 'no such company in DB yet', 'bearbeitetvon' => '', 'startDateTime' => '', 'done' => '', 'id' => ''));
  echo json_encode($jsonArrayObject);
  exit;
}

因此,第一个示例返回一个有效的json数组。有4行结果。 var_dump将每行吐出为数组,然后在底部是json编码的数组,该数组将显示在表中。

array(5) {
  ["maileingang"]=>
  string(19) "2018-11-21 14:46:43"
  ["bearbeitetvon"]=>
  string(7) "abcde"
  ["startDateTime"]=>
  string(19) "0000-00-00 00:00:00"
  ["done"]=>
  string(1) "0"
  ["id"]=>
  string(2) "16"
}
array(5) {
  ["maileingang"]=>
  string(19) "2018-11-23 06:52:00"
  ["bearbeitetvon"]=>
  string(7) "abcde"
  ["startDateTime"]=>
  string(19) "2019-01-15 22:00:00"
  ["done"]=>
  string(1) "0"
  ["id"]=>
  string(2) "17"
}
array(5) {
  ["maileingang"]=>
  string(19) "2018-11-21 14:46:00"
  ["bearbeitetvon"]=>
  string(7) "abcde"
  ["startDateTime"]=>
  string(19) "2018-11-13 11:00:00"
  ["done"]=>
  string(1) "1"
  ["id"]=>
  string(2) "18"
}
array(5) {
  ["maileingang"]=>
  string(19) "2018-11-25 12:08:00"
  ["bearbeitetvon"]=>
  string(7) "abcde"
  ["startDateTime"]=>
  string(19) "2018-11-27 05:00:00"
  ["done"]=>
  string(1) "1"
  ["id"]=>
  string(2) "19"
}
[{"maileingang":"2018-11-21 14:46:43","bearbeitetvon":"abcde","startDateTime":"0000-00-00 00:00:00","done":"0","id":"16"},{"maileingang":"2018-11-23 06:52:00","bearbeitetvon":"abcde","startDateTime":"2019-01-15 22:00:00","done":"0","id":"17"},{"maileingang":"2018-11-21 14:46:00","bearbeitetvon":"abcde","startDateTime":"2018-11-13 11:00:00","done":"1","id":"18"},{"maileingang":"2018-11-25 12:08:00","bearbeitetvon":"abcde","startDateTime":"2018-11-27 05:00:00","done":"1","id":"19"}]

现在是json数组返回完全为空的示例。仅返回了一行(正确),但是以某种方式json编码似乎失败了:

array(5) {
  ["maileingang"]=>
  string(19) "2018-12-07 15:33:00"
  ["bearbeitetvon"]=>
  string(7) "abcde"
  ["startDateTime"]=>
  string(19) "2018-12-12 13:00:00"
  ["done"]=>
  string(1) "0"
  ["id"]=>
  string(2) "23"
}
[]

有人知道为什么吗?似乎没有任何非法字符,等等。当我创建数据库连接时,我已经在声明mysqli_set_charset($db, 'utf8');

编辑:哦,我注意到第一个查询实际上应该返回5个结果,但仅返回4个结果。但是没有for循环,我意外地从0或1开始。

1 个答案:

答案 0 :(得分:0)

弄清楚了-对于那些后来迷惑于此的人:

内部if语句中带有while语句的问题是这样的:

if ($resultsrows = mysqli_fetch_assoc($result)) {
    $array2 = array();

    while ($resultsrows = mysqli_fetch_assoc($result)) {
      $array2[] = $resultsrows;
      //var_dump($resultsrows);
    }
    echo json_encode($array2);
  }else {
    $jsonArrayObject = array(array('maileingang' => 'no maintenances for this lieferant in system.', 'bearbeitetvon' => '', 'startDateTime' => '', 'done' => '', 'id' => ''));
    echo json_encode($jsonArrayObject);
  }

第一个if语句检查$resultsrows = mysqli_fetch_assoc($result)检查了0个结果,因此在检查从结果1开始时相同。

这就是为什么结果0(在只有1的情况下)根本没有编码,而在结果多于1的情况下,例如在我的第一个示例中只有5个结果仅显示4的情况下,第一个一个没有被编码。