Тест на пустой набор результатов в Amazon SimpleDB PHP SDK - PullRequest
0 голосов
/ 25 июня 2011

Я пытался интегрировать мобильное приложение с SimpleDB, и у меня возникла проблема с проверкой ответа Select на пустоту.Я не особо разбираюсь в программировании на PHP и смущаюсь, просматривая код.

Вот соответствующий код, чтобы получить все нужные мне элементы:

foreach ($duuids as $duuid) {
  $results = null;
  $select_expression = "SELECT * FROM `thestore` WHERE thing IS NOT NULL AND duuid='" . $duuid . "' ORDER BY thing DESC LIMIT 100";

  $next_token = null;

  do {
    if ($next_token)
    {
        $results = $sdb->select($select_expression, array(
            'NextToken' => $next_token,
        ));
    }
    else
    {
        $results = $sdb->select($select_expression);
    }

      foreach ($results->body->Item() as $item) {
        array_push($items, $item);
      }


      $next_token = isset($results->body->SelectResult->NextToken)
        ? (string) $results->body->SelectResult->NextToken
        : null;
  }
  while ($next_token);
}

Моя проблема в том,что иногда для duuid еще не загружены никакие данные, поэтому результирующий набор пуст, что разбивает «foreach ($ results-> body-> Item () как $ item)».

Согласнов SDK Docs select () возвращает CFResponse, в котором $ results-> body является документом SimpleXML.Я пробовал некоторые методы подсчета дочерних объектов в документе SimpleXML, такие как «$ results-> body-> SelectResult-> count ()», но, похоже, это не работает.

Вопрос:
Как правильно проверить пустоту этого результата?

Ответы [ 2 ]

1 голос
/ 27 июня 2011

Попробуйте это:

if($results->body->SelectResult->Item()){
  // process the children
}

Вы могли бы подумать, что функция count() будет работать правильно, но, похоже, она не работает правильно. Странно, что ...

0 голосов
/ 27 июня 2011

Я не программист PHP, но могу дать вам некоторое представление -

  1. Вы можете проверить размер карты атрибутов

Выберите результаты >> Получить элементы >> Проверьте размер атрибута MAP

  1. Вы можете проверить выбранные результаты для нуля (не подтвердить, будет ли это происходить)
...