【问题标题】:Weird error when executing MSSQL prepared query执行 MSSQL 准备查询时出现奇怪的错误
【发布时间】:2013-09-26 09:42:02
【问题描述】:

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

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

有人知道这个错误是什么意思吗? 非常感谢

【问题讨论】:

  • 看起来您传入的参数应该是整数? (SetId)
  • 2013/2014 参数工作正常,它的 14153 参数没有绑定,但我尝试在没有引号的情况下绑定它,但不幸的是仍然产生相同的错误:(,而且在数据库,SetId 字段定义为文本字段

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


【解决方案1】:

警告:odbc_execute():SQL 错误:[Microsoft][ODBC SQL Server Driver]参数号无效,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 重新组织为“从表中选择 p1_column,p2_column”。有时驱动程序会错误地进行重组(请参阅this faq entry 并查看数据截断错误)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2011-06-15
    • 1970-01-01
    • 2011-02-22
    • 2016-11-11
    相关资源
    最近更新 更多