2014-10-03 2 views
0

Azure SDK for PHP를 사용하여 테이블 스토리지에서 쿼리하려고합니다.PHP - Azure 테이블 스토리지가 1000 개가 넘는 엔티티가있는 경우

내 쿼리 같이 보인다 :

$tableRestProxy = ServicesBuilder::getInstance()->createTableService($this->connectionString); 
    $filter = "(PartitionKey eq '$id')"; 

    $options = new QueryEntitiesOptions(); 
    $options->setFilter(Filter::applyQueryString($filter)); 

    $result = $tableRestProxy->queryEntities('test', $options); 
    $entities = $result->getEntities(); 

    $nextPartitionKey = $result->getNextPartitionKey(); 
    $nextRowKey = $result->getNextRowKey(); 

    while (!is_null($nextRowKey) && !is_null($nextPartitionKey)) { 

     $options = new QueryEntitiesOptions(); 
     $options->setNextPartitionKey($nextPartitionKey); 
     $options->setNextRowKey($nextRowKey); 
     $options->setFilter(Filter::applyQueryString($filter)); 

     $result2 = $tableRestProxy->queryEntities("test", $options); 
     $newentities = $result2->getEntities(); 
     $entities=array_merge($newentities, $entities);  

    } 

문제 : while 루프로 실행하면 항상 각 쿼리에 대해 동일한 nextrowkey 및 nextpartitionkey로, 처음 1000 다시 개체를 얻을. 따라서 무한 루프가 생성됩니다.

내가 계속 문의가 잘못 되었습니까? 도움을 주시면 감사하겠습니다.

답변

1

@ Gaurav : 이것은 사실이지만 두 번째 루프에서만 발생합니다 (코드를 게시 할 때 두 줄을 추가하는 것을 잊었습니다).

나는 적어도 반나절 동안 무엇이 잘못되었는지 알아 내려고 노력해 왔습니다. 마지막으로 알겠습니다. "버그"가있는 이전 버전의 Windows Azure PHP SDK 때문입니다. 이 스레드의 맨 아래에있는이 "버그"를 우연히 발견했습니다. https://github.com/Azure/azure-sdk-for-php/issues/702 Windows Azure SDK의 이전 버전에서는 필요없는 것으로 보이는 _encodeODataUriValue를 사용합니다.

+0

굉장! 답변을 받아 들일 수 있겠습니까? –

관련 문제