0

我遇到了 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,那么查询工作正常。

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

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

4

1 回答 1

1

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

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

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

我知道 SQLDescribeParam 与 SQL Server 驱动程序有关的问题。为了支持 SQLDescribeParam,驱动程序将您的 SQL 重新组织为“从表中选择 p1_column, p2_column”。有时驱动程序会错误地进行重组(请参阅此常见问题解答条目并查看数据截断错误)。

这些天我不做 PHP 或与 PHP 中的 ODBC 支持有任何关系,但我建议您从 ODBC 驱动程序管理器获取 ODBC 跟踪,这可能有助于识别问题。

于 2013-09-27T10:28:30.413 回答