php - "Incorrect SQLSTATE given to is_truncated_warning."在 Debian Linux 中使用 PHP 和 SQLSRV

标签 php sql-server linux connection-pooling sqlsrv

我在开发服务器上为 SQL Server 使用 Microsoft 的 ODBC 驱动程序(版本 17)。在连接池关闭的情况下,应用程序的运行速度令人无法接受。如果我打开连接池,应用程序运行得更快,但是一个查询量特别大的页面成功执行了大约五个查询,然后死掉了

PHP Fatal error: Incorrect SQLSTATE given to 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

我试过增加连接数,但没有明显效果。

我已尝试使用谷歌搜索错误并通读 the issues on Github ,但似乎没有其他人遇到过这种情况。

另一条可能有帮助的信息:应用程序在 IIS 上使用 PHP5.6 和 FreeTDS 运行良好(快速,使用池化)。我希望能够在 Linux 上迁移到更新版本的 PHP。

最佳答案

如果您正在检索长度超过 256 个字符的字段,此特定驱动程序有时会发生这种情况。有两种方法可以解决它:

  1. 将字段限制为 256 个字符。这并不总是可行的,但有时人们决定做一些事情,比如用 STUFF (( ... FOR XML PATH('') ), 1, 1, '').

  2. 避免使用您自己的函数包装对数据库的直接调用。我发现只有在我自己的函数中包含对 sqlsrv_query 等函数的调用时,我才会遇到这个问题,以便于使用。直接调用 sqlsrv_...() 函数似乎总是有效。

如果有帮助, fatal error 总是由调用 sqlsrv_fetch_object() 触发。

关于php - "Incorrect SQLSTATE given to is_truncated_warning."在 Debian Linux 中使用 PHP 和 SQLSRV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48638113/

相关文章:

sql-server - 用户“IIS APPPOOL\”登录失败

sql-server - SSIS 在设计时获取连接但在同一台机器上调试期间失败

php - Socket发送终端输入的数据

.NET/Entity Framework Core/SQL Server 过程返回重复值

linux - 在linux中使用intel编译器icpc编译c++程序

linux - 在 dmesg 命令的输出之后

javascript - jquery通过php echo实现多个id选择器

php - php根据id添加数据库字段

php - 正则表达式模式仅匹配不包含空格的字符串 PHP

php - 修改 PHP 发布数据