sql server — & quot; неверный SQLSTATE, присвоенный is_truncated_warning. & quot; использование PHP с SQLSRV в Debian Linux

Я использую ODBC-драйвер Microsoft (версия 17) для SQL Server на сервере разработки. При отключенном пуле соединений приложение работает неприемлемо медленно. Если я включу пул подключений, приложение будет работать намного быстрее, но одна страница с большим количеством запросов успешно выполнит около пяти запросов, а затем умрет с

Неустранимая ошибка PHP: неверное значение SQLSTATE, присвоенное is_truncated_warning

Вот мой odbcinst.ini, на случай, если это поможет

[ODBC]
Pooling=Yes

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-17.0.so.0.5
UsageCount=1
CPTimeout=120

Я попытался увеличить количество соединений, но это не имеет никакого видимого эффекта.

Я попытался погуглить на ошибку и прочитал проблемы на Github, но никто другой, кажется, не сталкивался с этим.

Еще одна полезная информация: приложение работает отлично (быстро, использует пул), используя PHP5.6 и FreeTDS на IIS. Я надеялся, что смогу перейти на более новую версию PHP для Linux.

1

Решение

Иногда это может случиться с этим конкретным драйвером, если вы извлекаете поля длиной более 256 символов. Есть два способа обойти это:

  1. Ограничьте поля до 256 символов. Это не всегда практично, но иногда люди решают делать такие вещи, как объединение большого количества данных из разных полей в одно с STUFF ((… FOR XML PATH (»)), 1, 1, »).

  2. Старайтесь не связывать прямые вызовы с базой данных своими собственными функциями. Я обнаружил, что эта проблема возникает только в том случае, если для удобства использования я поместил вызовы функций, таких как sqlsrv_query, в свои собственные функции. Вызов функции sqlsrv _… () напрямую всегда работает.

В случае, если это полезно, фатальная ошибка всегда вызывается вызовом sqlsrv_fetch_object ().

0

Другие решения

Я периодически получал эту ошибку, вызывая метод PDO fetch ().

Для меня решение состояло в том, чтобы удалить мою бродячую виртуальную машину и воссоздать ее, так что, возможно, произошло некоторое повреждение или плохая комбинация драйверов PDO и ODBC

0