我使用预准备语句将行插入表中,但是我从PHP日志中返回了此错误。请注意,我编辑了文件路径。
[2015年4月20日13:15:17 UTC] PHP警告:
odbc_execute()
:SQL错误:[Microsoft] [ODBC SQL Server驱动程序]插入值列表与列列表不匹配,SQL状态为21S01 in第93行foobar.php
中的SQLDescribeParameter
我插入的表格就是这样设置的。对于此示例,列名已被修改为简单的名称。类型包括在内。
TABLE1
ID | C1 | C2 | C3 | C4 | C5 | C6 | C7 | C8
int | varchar | varchar | datetime | varchar | int | varchar | varchar | varchar
请注意,ID
每次插入都会自动递增。此功能的行为符合预期。这是我的查询。很简单:
$stmt = odbc_prepare($this->connection,"
INSERT INTO TABLE1 (C1,C2,C3,C4,C5,C6,C7,C8)
VALUES (?, ?, CAST(CONVERT(char, GETDATE(), 100) AS datetime), ?, ?, ?, ?, ?)
");
error_log($c1.' '.$c2.' '.$c4.' '.$c5.' '.$c6.' '.$c7.' '.$c8);
if( odbc_execute($stmt,array($c1,$c2,$c4,$c5,$c6,$c7,$c8)) )
{
error_log("Success");
}
else
{
error_log("Failure");
}
odbc_free_result($stmt);
当我仅将C1
传递给C6
时,这可以按预期工作。例如,此查询成功执行。我可以将上面的odbc_execute
声明保留为未经修改:
$stmt = odbc_prepare($this->connection,"
INSERT INTO TABLE1 (C1,C2,C3,C4,C5,C6,C7,C8)
VALUES (?, ?, CAST(CONVERT(char, GETDATE(), 100) AS datetime), ?, ?, ?, '?', '?')
");
这会将字符串?
插入C7
和C8
。我把这种方法仅仅用于调试目的,就我能够得到的而言。我尝试插入C7
和C8
时,查询完全失败。我查看了类型以确保匹配,并且有。 $c7
和$c8
是字符串,C7
和C8
是varchars。我使用error_log
在执行之前打印变量,变量保持正确的值。
我唯一剩下的理论是你出于某种原因无法将这么多的值插入表中,但这也没有意义。稍后在代码中我有更大的插件,可以正常工作,没有这个问题。我从来没有真正见过这样的事情,所以我很好奇是否有人对这里发生的事情有任何线索。我将不胜感激!