尝试绑定参数号2101. sql server最多支持2100个参数

时间:2017-11-20 16:59:04

标签: php sql-server phinx

我正在尝试通过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();

非常感谢

2 个答案:

答案 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();
}