Запуск хранимых процедур MSSQL через ODBC (и получение результатов обратно) с помощью PHP

Моя работа заключается в перемещении всех наших веб-приложений PHP с нашего производственного веб-сервера Windows в новую серверную среду Linux специально для приложений PHP. Липкая часть заключается в том, что несколько приложений PHP, которые мы запускаем, используют базы данных MSSQL, и поэтому все подключения к БД должны быть переписаны для использования unixODBC / FreeTDS, поскольку PHP в Linux не поддерживает mssql_connect () и это связано функции.

I ' у вас отключилось соединение, и основные запросы выполняются нормально. Проблема, с которой я столкнулся, связана с запуском хранимых процедур и репликацией функций mssql_init () / mssql_bind () / mssql_execute () через ODBC.

Я работаю над следующей проблемой:

$sp = mssql_init('sp_Search', $this->_link);
mssql_bind($sp, '@search', $this->_searchString, SQLVARCHAR);
$results = mssql_execute($sp);

I ' Я много читал о различных функциях ODBC и MSSQL. Я пробовал использовать функции odbc_prepare () / odbc_execute (), но безрезультатно (я всегда получаю коды ошибок HY000 от SQL-сервера). Самое близкое, что я пришел, это:

$results = odbc_exec($this->_link, "EXEC sp_Search @search='@this->_searchString'");

Выполнение этого запроса ("EXEC sp_Search @ search = 'blah'") через консоль управления MSSQL работает отлично, но через PHP, похоже, работает, но если я попытаюсь получить строк из набора результатов, я получаю ошибку «Нет доступных кортежей в этом индексе результата». И odbc_next_result () возвращает false, несмотря ни на что.

Я также пробовал установить курсор на соединение с SQL_CUR_USE_ODBC, но это тоже не помогло. У кого-нибудь есть опыт в этом? Возможно ли это вообще, или эта функция просто недоступна без встроенного драйвера MSSQL?

Изменить:

Чтобы уточнить, я пробовал использовать odbc_prepare () и odbc_execute () следующим образом:

$results = odbc_prepare($this->_link, "{CALL sp_Search(?)}");
$params = array($this->_searchString);
odbc_execute($results, $params);

Это приводит к следующая ошибка:

Warning: odbc_execute(): SQL error: Failed to fetch error message, SQL state HY000 in SQLExecute
5
задан Brad Westness 30 September 2010 в 21:08
поделиться