запрос mysqli возвращает true, но fetch_assoc не работает

#php #mysql #mysqli

#php #mysql #mysqli

Вопрос:

Я использую PHP и MySQL (mysqli) в XAMPP, у меня есть выпадающий список, и пользователь должен выбрать его, затем используется запрос для поиска идентификатора выбранного значения, но он не работает. Я уже делал это еще три раза, и это сработало, но этот не работает.

     $sql = "SELECT foo_id FROM foo_table
WHERE foo_name = 'bar';";
    $res = $conn->query($sql);
    for ($i = 0; $i < 500; $i  ) {
        $row = $res->fetch_assoc();
        echo $row[row["foo_id"]]
    }
  

Проблема в том, что fetch_assoc ничего не возвращает, даже если переменная $res возвращает true .

Редактировать: я забыл упомянуть, что выполнение запроса в phpmyadmin возвращает результаты в обычном режиме.

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

1. Почему вы делаете (неправильный) двойной индекс $row[row["foo_id"]] ? Это даже выдает вам предупреждения (которые являются скрытыми ошибками). Проверьте свои журналы и сделайте так, чтобы ваш код выполнялся без ошибок, предупреждений или уведомлений.

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

3. @Progman, если я запускаю запрос в phpmyadmin, есть один результат, но когда я делаю это в приведенном выше коде, его нет.

Ответ №1:

Я не уверен, почему вы повторяете более 500 раз? это не имеет смысла.

Наилучшая практика для извлечения данных из базы данных —

 $sql  = "SELECT foo_id FROM foo_table
          WHERE foo_name = 'bar'";
$res = $conn->query($sql);
if ($res->num_rows > 0) {
   // output data of each row
   while($row = $res->fetch_assoc()) {
      echo $row["foo_id"];
   }
 }
  

или

  $foo_id = ''
 if ($res->num_rows > 0) {
   // output data of each row
   while($row = $res->fetch_assoc()) {
      $foo_id = $row["foo_id"];
   }
 }
 for ($i = 0; $i < 500; $i  ) {
    echo $foo_id;
 }
  

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

1. это был исходный код, 500 итераций — результат того, что я пытался решить проблему (по неправильному пути (очевидно))

2. Кроме того, я только что заметил, что в вашем примере кода есть $res и $result, я думаю, вы забыли изменить имя одной из переменных, возможно, вы захотите это отредактировать

Ответ №2:

Я нашел решение, проблема в том, что реальная база данных использовала греческие символы в записях, и для базы данных нужно было установить utf8-bin, после этого это сработало.