我正在尝试通过phinx运行一些迁移到MSSQL,当我执行我的查询结果得到以下消息“尝试绑定参数号2101.sql server支持最多2100个参数”
我一直在寻找3天的解决方案,有谁知道,可能是什么问题,我该如何解决?可能是一个与我的php迁移文件有关的问题?或者关于我的phinx配置?
这是我的迁移文件的一部分:
$rows =
[
[
'COLUMNA' => 111,
'COLUMNB' => 101,
'COLUMNC' => '-1',
'COLUMND' => '',
'COLUMNE' => 'ERROR',
'COLUMNF' => NULL,
'COLUMNG' => 1,
'COLUMNH' =>0,
'COLUMNI' => 10002,
'COLUMNJ' => '2017-11-12 00:00:00.000',
'COLUMNK' => -1,
'COLUMNM' => -1
],
[ 'COLUMNA' => 112,
'COLUMNB' => 101,
'COLUMNC' => '-1',
'COLUMND' => '',
'COLUMNE' => 'ERROR',
'COLUMNF' => NULL,
'COLUMNG' => 1,
'COLUMNH' =>0,
'COLUMNI' => 10002,
'COLUMNJ' => '2017-11-12 00:00:00.000',
'COLUMNK' => -1,
'COLUMNM' => -1
],
]
$X = $this->table('MYTABLE');
$X->insert($rows);
$X->saveData();
非常感谢
答案 0 :(得分:0)
显然,您正在尝试绑定太多参数,解决方案是根据您的数据批量执行1000行~12000个参数的迁移。
$X = $this->table('MYTABLE');
$data = [];
for ($i = 0; $i < count($rows); i++)
{
$data[] = $rows[i];
if(i % 1000 === 0)
{
$X->insert($data);
$X->saveData();
$data = [];
}
}
答案 1 :(得分:0)
您可以使用php轻松地对数据进行分块。如果需要,还可以通过检查数据大小来确定合适的块大小。
$chunk_size = floor(2100 / count($rows[0]));
foreach (array_chunk($rows, $chunk_size) as $data_chunk ) {
$X->insert($data_chunk)->saveData();
}