Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure表存储php分页不工作_Php_Azure_Pagination - Fatal编程技术网

Azure表存储php分页不工作

Azure表存储php分页不工作,php,azure,pagination,Php,Azure,Pagination,我是azure table storage的新手,我正在使用php构建一个带有分页链接的表,其中包含来自azure table storage的数据。例如,您可以检查。在1000条记录之前,所有操作都正常,但当我转到1010条记录时,它返回此错误:- 失败:代码:400值:错误请求详细信息(如果有): {“odata.error”:{“code”:“InvalidInput”,“message”:{“lang”:“en-US”,“value”:“One” 请求输入的数量无效 因此,示例的quer

我是azure table storage的新手,我正在使用php构建一个带有分页链接的表,其中包含来自azure table storage的数据。例如,您可以检查。在1000条记录之前,所有操作都正常,但当我转到1010条记录时,它返回此错误:-

失败:代码:400值:错误请求详细信息(如果有): {“odata.error”:{“code”:“InvalidInput”,“message”:{“lang”:“en-US”,“value”:“One” 请求输入的数量无效

因此,示例的
queryPaginationEntitiesSample函数{$options->setTop($numPerPage*($page-1));}
中的代码导致了此错误。有人能帮我解决此问题吗

function queryPaginationEntitiesSample($tableClient,$tableName,$numPerPage,$page,$filter) { 
    try { 
        $options = new QueryEntitiesOptions(); 
        $options->setFilter(Filter::applyQueryString($filter)); 
        if($page==1){ 
            $options->setTop($numPerPage);
            $options->setSelectFields(array('PartitionKey','RowKey','Timestamp'));  
            $result = $tableClient->queryEntities($tableName, $options); 
            $entities = $result->getEntities(); 
        } else{ 

             //skip $numPerPage * ($page-1) records 
            $options->setTop($numPerPage * ($page-1)); 
            $options->setSelectFields(array('PartitionKey','RowKey','Timestamp')); 
            $result = $tableClient->queryEntities($tableName, $options); 
            $nRowKey = $result->getNextRowKey(); 
            $nPartitionKey = $result->getNextPartitionKey(); 
            $options = new QueryEntitiesOptions(); 
            $options->setFilter(Filter::applyQueryString($filter)); 
            $options->setTop($numPerPage); 
            $options->setNextRowKey($nRowKey); 
            $options->setNextPartitionKey($nPartitionKey);  
            $result = $tableClient->queryEntities($tableName, $options); 
            $entities = $result->getEntities(); 
        }
        return $entities; 
    }catch(ServiceException $e){ 
        $code = $e->getCode(); 
        $error_message = $e->getMessage(); 
        echo $code.": ".$error_message.PHP_EOL; 
        return null; 
    } 
} 

在对表服务的单个请求中可以获取的最大实体数为
1000
。由于您要求表服务返回
1010
实体,因此出现此错误

我认为您需要以某种方式更改您的逻辑(抱歉,我对PHP不太熟悉,因此无法提供代码)。但本质上,您需要返回延续标记(下一个PartitionKey和下一个RowKey)以及实体,并将这些值传递给
QueryPaginationEntitySample
方法并使用它们


请参阅作为参考(解决方案在.Net中)。

您在这里的主要问题是您试图在每次迭代中修改
$top
的值,这与
跳过
不同

从这里的文档:

$top
仅返回集合中前n个表或实体

基本上,您需要获得延续令牌并每次提供相同的过滤器和
$top

您当前所做的是有效地增加您想要的每个“页面”数据的结果量。例如,
$top
为10:

Page 1: 10 entries retrieved. 10 total entries retrieved.
Page 2: 10 entries retrieved. 20 total entries retrieved.
Page 3: 20 entries retrieved. 40 total entries retrieved.
Page 4: 30 entries retrieved. 70 total entries retrieved.
...
Page 99: 990 entries retrieved. 49510 total entries retrieved.
Page 101: 1000 entries retrieved. 50510 total entries retrieved.
Page 102: 1010 entries attempted. <-- Not allowed by design.
第1页:检索到10个条目。总共检索到10个条目。
第2页:检索到10个条目。总共检索到20个条目。
第3页:检索到20个条目。共检索到40个条目。
第4页:检索到30个条目。共检索到70个条目。
...
第99页:检索到990条条目。检索到的条目总数为49510条。
第101页:检索到1000条条目。共检索到50510条条目。

第102页:尝试了1010个条目。
$numPerPage
的值设置是多少?$numPerPage设置为10,并且我正在使用JasonGrimes\Paginator进行分页。请编辑您的问题并包含您正在使用的代码。我现在添加了完整的分页功能。是否有方法跳过记录并获取下一个记录?我已设置每页记录s到10,所以在第101页和setTop设置为1000之前都可以正常工作,但是当我请求将第102页的setTop设置为1010时,出现了错误,所以请告诉我一些想法,如何在第101页之后将setTop设置为1000?我也可以获得下一个分区键和下一行键,但在第102页时它会中断