尝试绑定参数编号 2101。sql 服务器最多支持 2100 个参数
tried to bind parameter number 2101. sql server supports a maximum of 2100 parameters
我正在尝试 运行 通过 phinx 迁移到 MSSQL,当我执行查询时得到以下消息 "tried to bind parameter number 2101. sql server supports a maximum of 2100 parameters"
我一直在寻找解决方案大约 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();
非常感谢
显然您试图绑定太多参数,解决方案是根据您的数据分批进行迁移,比如说 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 = [];
}
}
您可以使用 php 轻松分块数据。如果需要,您还可以通过检查数据大小来确定合适的块大小。
$chunk_size = floor(2100 / count($rows[0]));
foreach (array_chunk($rows, $chunk_size) as $data_chunk ) {
$X->insert($data_chunk)->saveData();
}
我正在尝试 运行 通过 phinx 迁移到 MSSQL,当我执行查询时得到以下消息 "tried to bind parameter number 2101. sql server supports a maximum of 2100 parameters"
我一直在寻找解决方案大约 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();
非常感谢
显然您试图绑定太多参数,解决方案是根据您的数据分批进行迁移,比如说 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 = [];
}
}
您可以使用 php 轻松分块数据。如果需要,您还可以通过检查数据大小来确定合适的块大小。
$chunk_size = floor(2100 / count($rows[0]));
foreach (array_chunk($rows, $chunk_size) as $data_chunk ) {
$X->insert($data_chunk)->saveData();
}