Один из вариантов выбора не выполняется с помощью unixOdbc-SQLSTATE[24000]: недопустимое состояние курсора
я запускаю Ubuntu 13.10 с установленными FreeTDS и ODBC (пакет: php5-odbc). Я использую TDS version = 8.0, но также пробовал TDS version = 7.2.
Я использую PDO, и это мой DSN:
$dsn = sprintf('odbc:Driver=FreeTDS;Server=%s;Port=1433;Database=%s', DB_SQL_SERVERNAME, DB_DB_NAME);
я подключаюсь к экземпляру MSSQL и выполняю некоторые запросы вставки / выбора, используя транзакции, однако я не могу понять, почему этот запрос терпит неудачу:
SELECT id
FROM tblColumns
WHERE siteID = 10063 AND
typeID = 1000 AND
extendedTypeID = 18 AND
label = 'RwThiFc85A'
дает ошибку:
SQLSTATE[24000]: недопустимое состояние курсора: 0 [FreeTDS][SQL Сервер] Недопустимый состояние курсора (SQLExecute[0] at /строительства/утилита buildd/рнр5-5.5.3+для dfsg/ВН/pdo_odbc/odbc_stmt.c: 254)
я запускаю пучки подобных запросов раньше, и они выполняются хорошо, например:
SELECT id
FROM tblColumns
WHERE siteID = 10063 AND
typeID = 1000 AND
extendedTypeID = 3 AND
label = 'VwThiFc91B'
у вас есть идеи, почему это происходит?
у меня не было таких проблем с dblib и sqlsrv, однако теперь я на Unix и не могу использовать sqlsrv, и из-за проблем с кодировкой DBLIB UTF-8 я пытаюсь использовать ODBC.
2 ответов
похоже, у вас одновременно открыты два разных результирующих набора. Необходимо завершить обработку первого набора результатов и закрыть его, чтобы можно было повторно использовать оператор для создания второго набора результатов.
вот практическая реализация @mihai-bejenariu ответ.
Если вы используете PHP и PDO, вы можете сделать так:
$query = "<your sql query>";
$sth = $connection->prepare($query);
$sth->execute();
$result = $sth->fetchAll();
$sth->closeCursor(); //Write this after you have fetched the result