ODBC - 插入值列表与列列表不匹配

时间:2015-04-20 13:38:54

标签: php sql sql-server odbc

我使用预准备语句将行插入表中,但是我从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), ?, ?, ?, '?', '?')
");

这会将字符串?插入C7C8。我把这种方法仅仅用于调试目的,就我能够得到的而言。我尝试插入C7C8时,查询完全失败。我查看了类型以确保匹配,并且有。 $c7$c8是字符串,C7C8是varchars。我使用error_log在执行之前打印变量,变量保持正确的值。

我唯一剩下的理论是你出于某种原因无法将这么多的值插入表中,但这也没有意义。稍后在代码中我有更大的插件,可以正常工作,没有这个问题。我从来没有真正见过这样的事情,所以我很好奇是否有人对这里发生的事情有任何线索。我将不胜感激!

0 个答案:

没有答案