2013-12-15 1 views
6

Я запускаю Ubuntu 13.10 с установленным FreeTDS и ODBC (пакетом: php5-odbc). Я использую tds version = 8.0, но также попробовал tds version = 7.2.Один из SELECT с ошибкой использует unixOdbc - 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 похож e, и они выполняются хорошо, например:

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

У вас есть два разных набора результатов, открытых одновременно. Вам нужно закончить обработку первого ResultSet и закрыть его, чтобы вы могли повторно использовать Statement для создания второго ResultSet.

+0

Я использую только query() вместо prepare() и execute(). Разве это имеет значение? – NeverEndingQueue

+0

Также я не понимаю, что вы имеете в виду, говоря: «одновременно открывается два разных запроса». Я запускаю один из запросов, и после его запуска есть следующий запрос, нет возможности запустить 2 сразу или что-то в этом роде. Правильно? – NeverEndingQueue

+2

@NeverEndingQueue: Я подозреваю, что первые rs не закрыты, поэтому rs1.Close() должен исправить это. –

 Смежные вопросы

  • Нет связанных вопросов^_^