执行MSSQL准备的查询时出现奇怪的错误

时间:2013-09-26 09:42:03

标签: php sql-server sql-server-2005 odbc

我的odbc_ *函数存在问题。这是我遇到问题的第一个问题。 我有以下代码:

$conn = odbc_connect('DSN', 'USERNAME', 'PASSWORD');
$stmt = odbc_prepare($conn, "
    SELECT *
FROM Table1 AS a 
    INNER JOIN Table2 AS c 
        ON c.StudentId = a.StudentId 
            AND c.ContactId = ? 
            AND c.SetId = a.SetId 
    WHERE a.SetId = ? 
");

$result = odbc_execute($stmt, array('14153', '2013/2014'));

然而,这会产生错误:

Warning: odbc_execute(): SQL error: [Microsoft][ODBC SQL Server Driver]Invalid parameter number, SQL state S1093 in SQLDescribeParameter

如果我提取c.ContactId = ?并且不绑定值14153,那么查询工作正常。

但是我在另一个查询上绑定相同的值,它工作正常!

有谁知道这个错误表示什么? 非常感谢

1 个答案:

答案 0 :(得分:1)

  

警告:odbc_execute():SQL错误:[Microsoft] [ODBC SQL Server   驱动程序]参数号无效,SQL状态S1093中   SQLDescribeParameter

这有很多奇怪的事情。首先,没有ODBC 3 API SQLDescribeParameter,它是SQLDescribeParam。然后是您的错误状态S1093,它是ODBC 2状态,在ODBC 3中为mapped到07009。

错误07009表示传递给SQLDescribeParam的参数号错误,即在您的情况下不是1或2,这表明PHP中的基础ODBC支持出错或SQLNumParams返回错误的参数数。

我知道SQLDescribeParam与SQL Server驱动程序存在问题。为了支持SQLDescribeParam,驱动程序将SQL重组为'select p1_column,p2_column from table'。有时驱动程序会导致重组错误(请参阅this faq entry并查看数据截断错误)。

我最近没有做PHP或者在PHP中有更多的ODBC支持,但我建议你从ODBC驱动程序管理器获取ODBC跟踪,这可能有助于识别问题。