我正在尝试使用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个返回实体,每个查询都有相同的nexttrowkey和nextpartitionkey。因此,它创建了一个无限循环。
继续查询有什么问题?感谢您的帮助。
@Gaurav:这是真的,但只发生在第二个循环中(我在发布代码时忘记添加这两行)。
至少半天以来,我一直在努力找出问题所在。我终于明白了:这是由于旧版本的Windows Azure PHP SDK存在"错误"。我在这个帖子的底部偶然发现了这个"bug":https://github.com/Azure/azure-sdk-for-php/issues/702旧版本的Windows Azure SDK使用_encodeODataUriValue,这似乎是不必要的。