Моя работа находится в процессе переноса всех наших веб-приложений PHP с нашего производственного веб-сервера Windows на новую серверную среду Linux специально для приложений PHP. Важно отметить, что некоторые приложения PHP, которые мы запускаем, используют базы данных MSSQL, и, следовательно, все соединения с БД должны быть переписаны для использования unixODBC / FreeTDS, так как PHP в Linux не поддерживает mssql_connect () и это связано функции.
Я отключил соединение, и базовые запросы выполняются нормально. У меня проблема с запуском хранимых процедур и репликацией функций 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);
Я много читал о различных функциях 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?
Edit:
Просто чтобы уточнить, я пытался использовать 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