2013-12-15 20 views
6

FreeTDSとODBC(パッケージ:php5-odbc)をインストールしたUbuntu 13.10を実行しています。 私はtds version = 8.0を使用しましたが、tds version = 7.2も試しました。unixOdbcを使用してSELECTの1つが失敗する - SQLSTATE [24000]:無効なカーソル状態

私はPDOを使用していますが、これは私のDSNです:このクエリが失敗した理由を

$dsn = sprintf('odbc:Driver=FreeTDS;Server=%s;Port=1433;Database=%s', DB_SQL_SERVERNAME, DB_DB_NAME); 

私はMSSQLインスタンスに接続し、トランザクションを使用して、いくつかのINSERT/SELECTクエリを実行し、しかし、私は理解することはできません。

SELECT id 
FROM tblColumns 
WHERE siteID = 10063 AND 
    typeID = 1000 AND 
    extendedTypeID = 18 AND 
    label = 'RwThiFc85A' 

与えるエラー:

SQLSTATE[24000]: Invalid cursor state: 0 [FreeTDS][SQL Server]Invalid cursor state (SQLExecute[0] at /build/buildd/php5-5.5.3+dfsg/ext/pdo_odbc/odbc_stmt.c:254)

私はbefor似たクエリの束を実行していますたとえば、

SELECT id 
FROM tblColumns 
WHERE siteID = 10063 AND 
    typeID = 1000 AND 
    extendedTypeID = 3 AND 
    label = 'VwThiFc91B' 

なぜそれが起こるのでしょうか?

私はdblibとsqlsrvにこのような問題はありませんでしたが、今はUnix上でsqlsrvを使用できません。また、dblib UTF-8エンコーディングに関する問題のため、ODBCを使用しようとしています。

答えて

7

同時に2つの異なる結果セットが開いているようです。最初のResultSetの処理を終了してそれを閉じて、Statementを再利用して2番目のResultSetを作成する必要があります。

+0

私はprepare()とexecute()の代わりにquery()を使用しています。違いはありますか? – NeverEndingQueue

+0

また、私はあなたが言っていることを理解していない: "2つの異なる要求が同時に開く"。私はクエリの1つを実行し、それが実行された後に次のクエリがある、2を一度に実行する方法やそのようなものはありません。右? – NeverEndingQueue

+2

@ NeverEndingQueue:最初のrsが閉じていないと思われるので、rs1.Close()はそれを修正する必要があります。 –

関連する問題