【问题标题】:php - mysqli_fetch_assoc to to json encoded array works on most queries, but not on others (although the queries return valid results)php - mysqli_fetch_assoc 到 json 编码数组适用于大多数查询,但不适用于其他查询(尽管查询返回有效结果)
【发布时间】:2018-12-09 07:57:18
【问题描述】:

代码如下:

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 开始。

【问题讨论】:

    标签: php mysql json xmlhttprequest


    【解决方案1】:

    想通了 - 对于那些后来偶然发现的人:

    内部带有while语句的if语句是问题所在:

    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,因此相同的 while 检查从结果 1 开始。

    这就是为什么结果 0(在只有 1 个的情况下)根本没有被编码,并且在超过 1 个的情况下,就像在我的第一个示例中,有 5 个结果,其中只显示了 4 个,第一个一个没有编码。

    【讨论】:

      猜你喜欢
      • 2018-02-25
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 2012-12-17
      相关资源
      最近更新 更多