Drupal - db_fetch_array возвращает NULL для каждой строки - PullRequest
0 голосов
/ 11 мая 2010

Я использую db_fetch_array из Drupal для извлечения строк из моего db_query. Однако каждая возвращаемая строка равна NULL. Ввод запроса в PHP работает myadmin, поэтому я понятия не имею, что происходит. db_num_rows также возвращает количество строк. Вот код:

if(count($rebuild_ids))
  {
    $ids=implode(",",$rebuild_ids);
    $type_stmt = "SELECT * from {" . ItemType::$type_table_name . "} where id IN ($ids)";
    $new_items=db_query($type_stmt);
    if(!$new_items || db_num_rows($new_items) == 0)
    {
        return;
    }
    while($row = db_fetch_array($new_items));
    {
      if ($row!=NULL)
      {
          echo "I work!"
          $game_items[] = $row['id'];
          ItemInstance::$nid_to_item_type_code[$row['nid']] = $row['id'];
      }
    }
  }

Однако, оно никогда не попадает в третье выражение if (т.е. никогда не повторяет «я работаю!»). Есть идеи?

Ответы [ 3 ]

1 голос
/ 13 мая 2010

Дружеский совет: у Drupal есть стандарты кодирования http://drupal.org/coding-standards - это помогает их соблюдать. Эта ошибка была бы намного более очевидной ...

Кроме того, размещение переменных в запросе огромно, нет, не вижу http://drupal.org/writing-secure-code

0 голосов
/ 11 мая 2010

К разобрался. Это была точка с запятой после цикла while!

0 голосов
/ 11 мая 2010

$row не является NULL по определению, иначе оно даже не достигнет третьего if утверждения.

Нет необходимости проверять, содержит ли $row информацию, цикл while уже позаботится об этом, но если вы все равно хотите проверить, используйте что-то вроде empty($row) или count($row) > 0; не сравнивайте массив с NULL.

Хотя проверка совершенно не нужна ...

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