PHP yii2 dataProvider获取TotalCount并导出到Excel

时间:2016-05-03 15:30:58

标签: php mysql sql-server pdo yii2

我想使用以下代码从MySQL数据库导出所有数据:

public function actionExport()
{
return $this->createDatAndRen('export', false);
}


private function createDatAndRen($view, $setPagi = true)
{
    $searchModel = new ASearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    $paginat = new Pagination(['pageSize' => $setPagi ? 50 : $dataProvider->getTotalCount()]);
    $dataProvider->paginat = $paginat;

    return $this->render($view, [
        'searchModel' => $searchModel,
        'dpro' => $dataProvider,
    ]);
}

如果我点击导出按钮,我会收到此错误:

  

SQLSTATE [IMSSP]:尝试绑定参数号2101.SQL Server最多支持2100个参数。

我的问题是如果getTotalCount()= 50或1000我可以读取所有输出。但如果我有3049项,我就无法将其导出为ex​​cel。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

根据issue#10371

  

MSSQL对您可以传递给存储过程的许多参数有一个硬限制。看起来Yii2使用存储过程来准备SQL语句。

MySQL和Oracle也有这个限制。

一种解决方案可以是增加该限制,这是不推荐的(我没有找到任何人建议这样做)。

另一个解决方案是,当你达到限制时,将你的查询划分为大块,让我们说2000条记录并进行多次查询来获取你的数据。

答案 1 :(得分:-1)

请参阅此问题https://github.com/yiisoft/yii2/issues/10371

似乎只有MSSQL才有问题,这也可能与软件逻辑有关。

MSSQL驱动程序也可能存在问题。