我的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
,那么查询工作正常。
但是我在另一个查询上绑定相同的值,它工作正常!
有谁知道这个错误表示什么? 非常感谢
答案 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跟踪,这可能有助于识别问题。