PHP-Azure表存储中有1000多个实体



我正在尝试使用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,这似乎是不必要的。

最新更新