2013-12-15 27 views
6

Ubuntu 13.10'u FreeTDS ve ODBC (paket: php5-odbc) yüklü olarak çalıştırıyorum. Tds version = 8.0 kullanıyorum ama aynı zamanda tds version = 7.2 sürümünü kullandım.SELECT, unixOdbc - SQLSTATE [24000] kullanarak başarısız: Geçersiz imleç durumu

ben PDO kullanıyorum ve bu benim DSN geçerli: Bu sorgu başarısız neden

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

Ben MSSQL örneğine bağlanmak ve işlemlerini kullanarak bazı INSERT/SELECT sorguları gerçekleştirmek, ancak ben çözemiyorum:

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

vererek hatası:

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)

ben befor benzer sorguları demet çalıştırıyorum e ve bunlar iyi bir şekilde gerçekleştirilir, örneğin:

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

Bunun neden olduğu hakkında fikirleriniz var mı?

Ben dblib ve sqlsrv ile böyle bir sorun yoktu, ancak şimdi Unix'teyim ve sqlsrv kullanamazsınız ve dblib UTF-8 kodlamasıyla ilgili sorunlar nedeniyle ODBC'yi kullanmaya çalışıyorum.

cevap

7

Aynı anda iki farklı sonuç kümesinin açık olduğu anlaşılıyor. İlk ResultSet'inizi işlemeyi bitirmeniz ve kapatmanız gerektiğinden, ikinci ResultSet'i oluşturmak için Bildirimi yeniden kullanabilirsiniz.

+0

Hazırla() ve execute() yerine sadece query() kullanıyorum. hiç fark yapar mı? – NeverEndingQueue

+0

Ayrıca, "aynı anda iki farklı istek açık" ile ne demek istediğini anlamıyorum. Sorgulardan birini çalıştırıyorum ve bir sonraki sorguda koştuktan sonra 2'yi aynı anda çalıştırmak için bir yol yok. Sağ? – NeverEndingQueue

+2

@NeverEndingQueue: İlk rs'nin kapalı olmadığından şüpheliyim, bu yüzden rs1.Close() düzeltmelidir. –