2014-10-03 62 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循環我總是得到第一回1000名的實體,具有相同的nextrowkey和nextpartitionkey每個查詢。因此它創建了一個infinit循環。

我在繼續查詢時出錯了什麼? 任何幫助表示讚賞。

回答

1

@Gaurav:這是真的,但只發生在第二個循環(我忘了在發佈我的代碼時添加兩行)。

我一直在試圖找出至少半天有什麼問題。最後我明白了: 這是由於有一個「bug」的Windows Azure PHP SDK的舊版本。我偶然發現了此線程底部的這個「bug」:https://github.com/Azure/azure-sdk-for-php/issues/702 舊版本的Windows Azure SDK使用_encodeODataUriValue,這似乎是不必要的。

+0

太棒了!您介意將您的答案標記爲已接受嗎? – 2014-10-03 13:24:55

相關問題