2013-12-15 11 views
6

Sono in esecuzione Ubuntu 13.10 con FreeTDS e ODBC (pacchetto: php5-odbc) installati. Io uso tds version = 8.0, ma ho anche provato la versione tds = 7.2.Uno dei SELECT non funziona utilizzando unixOdbc - SQLSTATE [24000]: stato del cursore non valido

Sto usando DOP e questo è il mio DSN:

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

mi collego al istanza MSSQL ed eseguire alcune INSERISCI/query SELECT utilizzando le transazioni, ma non riesco a capire perché questa query ha esito negativo:

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

dando errore:

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)

sono in esecuzione mazzi di query similiar befor ee sono eseguiti bene, per esempio

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

Avete idee perché succede?

non ho avuto un tale problemi con DBLIB e SQLSRV, ma ora io sono su Unix e non posso usare SQLSRV, e causa di problemi con DBLIB codifica UTF-8 Sto cercando di utilizzare ODBC.

risposta

7

Sembra che siano aperti due set di risultati diversi contemporaneamente. È necessario completare l'elaborazione del primo ResultSet e chiuderlo in modo da poter riutilizzare l'istruzione per creare il secondo ResultSet.

+0

Sto usando solo query() invece di prepare() ed execute(). Fa qualche differenza? – NeverEndingQueue

+0

Anche io non capisco cosa intendi dicendo: "si aprono due richieste diverse allo stesso tempo". Eseguo una delle query e dopo che è stata eseguita c'è una query successiva, non c'è modo di eseguire 2 contemporaneamente o qualcosa del genere. Destra? – NeverEndingQueue

+2

@NeverEndingQueue: Sospetto che il primo rs non sia chiuso, quindi rs1.Close() dovrebbe risolverlo. –

Problemi correlati