php - mysqli_fetch_assoc в кодированный в json массив работает для большинства запросов, но не для других (хотя запросы возвращают действительные результаты) - PullRequest
0 голосов
/ 09 декабря 2018

Итак, вот код:

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.Theres 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 голосов
/ 09 декабря 2018

Понял это - для тех из вас, кто столкнулся с этим позже:

Внутренняя инструкция 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, первый не был закодирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...