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です。次に、ODBC 3 で 07009 にマップされるODBC 2 状態であるエラー状態 S1093 があります。

エラー 07009 は、SQLDescribeParam に渡されたパラメーター番号が間違っていたことを意味します。つまり、あなたのケースでは 1 または 2 ではないため、PHP の基礎となる ODBC サポートが間違っているか、SQLNumParams が間違った数のパラメーターを返したことを示唆しています。

SQL Server ドライバーでの SQLDescribeParam の問題を認識しています。SQLDescribeParam をサポートするために、ドライバーは SQL を「select p1_column, p2_column from table」に再編成します。時々、ドライバーは再編成を間違えます (このよくある質問のエントリを参照し、データが切り捨てられたエラーを調べてください)。

私は最近、PHP を使用していません。また、PHP での ODBC サポートとは関係ありませんが、ODBC ドライバー マネージャーから ODBC トレースを取得することをお勧めします。これが問題の特定に役立つ可能性があります。

于 2013-09-27T10:28:30.413 に答える