【问题标题】:PHP ODBC insert multiple rows at once into MSSQL returns errorPHP ODBC一次将多行插入MSSQL返回错误
【发布时间】:2021-08-19 10:13:02
【问题描述】:

我有 PHP 代码,我在其中执行 odbc_prepare 和 odbc_execute,我试图一次插入多行,但出现了这个奇怪的错误:

SQL error: [Microsoft][ODBC SQL Server Driver]Insert value list does not match column list, SQL state 21S01 in SQLDescribeParameter ..

回溯(我格式化输出以获得更好的可读性):

PHP   4. models\Tapas->query($query = 'INSERT INTO tzeit ([pers_id],[card_nr],[time],[type],[terminal_nr],[tzeit_id]) VALUES (?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?)', 
  $params = [
    0 => '0450', 
    1 => '0450', 
    2 => '2021-07-20 11:33:16.000', 
    3 => 1, 
    4 => 41, 
    5 => 1641816, 
    6 => '0405', 
    7 => '0405', 
    8 => '2021-07-20 11:36:49.000', 
    9 => 2, 
    10 => 41, 
    11 => 1641826, 
    12 => '0330', 
    13 => '0330', 
    14 => '2021-07-20 11:49:54.000', 
    15 => 1, 
    16 => 41, 
    17 => 1641836, 
    18 => '2069', 
    19 => '2069', 
    20 => '2021-07-20 11:49:58.000', 
    21 => 1, 
    22 => 41, 
    23 => 1641837, 
    24 => '0222', 
    25 => '0222', 
    26 => '2021-07-20 12:03:46.000', 
    27 => 2, 
    28 => 41, 
    29 => 1641851, 
    30 => '0390',
    31 => '0390', 
    32 => '2021-07-20 12:07:13.000',
    33 => 2, 
    34 => 41, 
    35 => 1641854, 
    36 => '0098', 
    37 => '0098', 
    38 => '2021-07-20 12:17:02.000', 
    39 => 2, 
    40 => 41, 
    41 => 1641861, 
    42 => '0405', 
    43 => '0405', 
    44 => '2021-07-20 12:23:51.000', 
    45 => 1, 
    46 => 41, 
    47 => 1641869
  ]) E:\msf\www\cas\models\A_MSSQL.php:116
PHP   5. odbc_prepare($connection_id = resource(17) of type (odbc link), $query = 'INSERT INTO tzeit ([pers_id],[card_nr],[time],[type],[terminal_nr],[tzeit_id]) 
  VALUES (?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?)') 
  E:\msf\www\cas\models\A_MSSQL.php:69

我尝试多次计算列和值,结果是相等的。我有 8 行插入,每行有 6 个值。共有 48 个值。 $params 数组有 48 个值。查询包含8个值组,共48个问号。

我的目标表结构非常简单(开发目的):

CREATE TABLE [dbo].[tzeit](
    [pers_id] [varchar](4) NOT NULL,
    [card_nr] [varchar](4) NOT NULL,
    [time] [datetime] NOT NULL,
    [type] [int] NOT NULL,
    [terminal_nr] [int] NOT NULL,
    [tzeit_id] [bigint] NOT NULL
)

我尝试将每一行一一插入,并且成功了。我只是不明白为什么它不能一次处理多行。可能有最大占位符的限制?

【问题讨论】:

  • 也许你有一个触发器或桌面上的“行为不端”的东西?
  • @Larnu 什么都没有。目标数据库是全新的,只包含这张表。
  • '2021-07-20 12:23:51.000'等文本发送datetime是否有效
  • @Charlieface 我相信是这样,因为我是这样写的,当我一一插入时它会起作用。

标签: php sql-server odbc


【解决方案1】:

这是因为SQL Server真的很老,语法不同。

SQL Server 2005: Insert multiple rows with single query

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2014-01-29
    • 2015-06-08
    • 2016-08-13
    • 2021-02-03
    • 2011-04-19
    • 2013-03-04
    相关资源
    最近更新 更多