我想使用以下代码从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项,我就无法将其导出为excel。
有什么想法吗?
答案 0 :(得分:0)
根据issue#10371:
MSSQL对您可以传递给存储过程的许多参数有一个硬限制。看起来Yii2使用存储过程来准备SQL语句。
MySQL和Oracle也有这个限制。
一种解决方案可以是增加该限制,这是不推荐的(我没有找到任何人建议这样做)。
另一个解决方案是,当你达到限制时,将你的查询划分为大块,让我们说2000条记录并进行多次查询来获取你的数据。
答案 1 :(得分:-1)