我正在尝试使用Azure SDK for PHP从我的表存储中进行查询。
我的查询如下:
$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。因此,它创造了一个无限循环。
我对查询的延续有什么问题? 任何帮助表示赞赏。
答案 0 :(得分:1)
@Gaurav:这是真的,但只发生在第二个循环上(我忘记在发布代码时添加两行)。
我一直试图找出至少半天的错误。终于我明白了: 这是由于旧版本的Windows Azure PHP SDK有一个" bug"。我偶然发现了这个" bug"在这个主题的底部:https://github.com/Azure/azure-sdk-for-php/issues/702 旧版本的Windows Azure SDK使用_encodeODataUriValue,这似乎是不必要的。