Новичок в PHP с непонятным фрагментом кода

#php #mysql

#php #mysql

Вопрос:

это должно быть просто, но, похоже, у меня это не работает. я тестировал его с хорошими и плохими паролями. несмотря ни на что, это не войдет в оператор else. я не уверен, чего мне не хватает

мой код:

 $mysqli = mysqli_connect("localhost", "joeuser", "somepass", "testDB");

 if (mysqli_connect_errno()) {
      printf("Connect failed: %sn", mysqli_connect_error());
      exit();
  } else {
      $sql = "SELECT * FROM login_info";      
      $res = mysqli_query($mysqli, $sql);

  if ($res) {
      while ($newArray = mysqli_fetch_array($res, MYSQLI_ASSOC)) {
          $id  = $newArray['first_name'];                          
          $testField = $newArray['last_name'];                      
          echo "The ID is ".$id." and the text is ".$testField."<br/>";
         }
  } else {
      printf("Could not retrieve records: %sn", mysqli_error($mysqli));
  }

        mysqli_free_result($res);
        mysqli_close($mysqli);
  }
 

Если я отправлю ему пользователя и пароль, которые существуют, он выполнит оператор if нормально, но если я отправлю ему тест для того, которого нет в БД, он все равно не выполнит остальное? почему?

Комментарии:

1. Какой оператор if? первый?

Ответ №1:

Для успешного выбора, ПОКАЗАТЬ, ОПИСАТЬ или ОБЪЯСНИТЬ запросы mysqli_query() вернут MySQLi_Result объект.

Запрос не выполняется, только если произошла какая-то серьезная ошибка. Тот факт, что SELECT запрос не соответствует ни одной строке, не делает запрос неудачным. Вы все равно получите MySQLi_Result объект обратно. Вы захотите проверить mysqli_num_rows , содержит ли результирующий набор какие-либо строки.

Кстати, избавьте себя от вложенности:

 if (!$something) {
    exit;
}

// continue as usual
 

Здесь нет необходимости else , поскольку вы все exit равно редактируете. Упрощает работу.

Комментарии:

1. Хотя я предпочитаю return, а не exit (надеюсь, окончательный код будет использовать функции)

Ответ №2:

Вот так:

 if ($res) {
      while ($newArray = mysqli_fetch_array($res, MYSQLI_ASSOC)) {
          $id  = $newArray['first_name'];                          
          $testField = $newArray['last_name'];                      
          echo "The ID is ".$id." and the text is ".$testField."<br/>";
         }
}

if (!isset($id)) {
      printf("Could not retrieve records: %sn", mysqli_error($mysqli));
}
 

Комментарии:

1. Потрясающе! это сработало, хотя я пробовал «if (empty ($ id))», и это не сработало, но «if (!isset ($ id))» работает, так что большое вам спасибо!