Об этой ошибке не было много, поэтому я спрашиваю здесь. Я переключу веб-приложение PHP с помощью MySQL на SQL Server 2008 (используя ODBC, а не php_mssql). Выполнение запросов или что-то еще не является проблемой, но когда я пытаюсь сделать scope_identity (или любые подобные функции), я получаю сообщение об ошибке «Выполнение SQL напрямую, без курсора». Я делаю это сразу после вставки, поэтому он все равно должен быть в области видимости. Запуск такой же инструкции insert, что запрос для идентификатора вставки отлично работает в SQL Server Management Studio. Вот мой код прямо сейчас (все остальное в классе обертке базы данных отлично работает для других запросов, так что я буду считать, что это не относится прямо сейчас):Ошибка «Выполнение SQL напрямую, без курсора» при использовании SCOPE_IDENTITY/IDENT_CURRENT
function insert_id(){
return $this->query_first("SELECT SCOPE_IDENTITY() as insert_id");
}
query_first является функцией, которая возвращает первый результат первое поле запроса (в основном эквивалент execute_scalar() на .net).
Полное сообщение об ошибке: Предупреждение: odbc_exec() [function.odbc-ВЫПЛН]: Ошибка SQL: [Microsoft] [SQL Server Native Client 10.0] [SQL Server] Выполнение SQL непосредственно; нет курсора, SQL состояние 01000 в SQLExecDirect в C: [...]. \ Database_MSSQL.php на линии 110
Соединение производится в начале сценария и никогда не закрывается. (Извините, я не знаю, как правильно отформатировать этот сайт) $ connStr = "Driver = {Собственный клиент SQL Server 10.0}; Server = {$ this-> server}; Database = {$ this-> база данных};"; $ this-> link_id = odbc_connect ($ connStr, $ this-> user, $ this-> pass); каждый запрос: odbc_exec ($ this-> link_id, $ sql); – Chris