【问题标题】:PDO fetches truncated XML from MS SQL databasePDO 从 MS SQL 数据库中获取截断的 XML
【发布时间】:2012-12-06 23:44:34
【问题描述】:

我正在尝试编写一个 PHP 脚本,该脚本将使用 PDO 检索存储在 MS SQL 数据库中的 XML 数据,然后使用 SimpleXML 解析 XML 数据。

问题在于检索 XML 数据会导致以下错误消息:

SQLSTATE[HY000]:一般错误:10007 Unicode 唯一排序规则中的 Unicode 数据或 ntext 数据无法发送到使用 DB-Library(如 ISQL)或 ODBC 版本 3.7 或更早版本的客户端。 [10007](严重性 5)

我正在进行类型转换以检索 XML 数据,该数据作为文本存储在数据库中。我不一定 需要 将它作为真正的 XML 返回。将其作为字符串检索就可以了,因为无论如何我都在使用 SimpleXML 来解析数据。

但是,如果我尝试以文本形式检索此数据,而不进行类型转换,则 XML 字符串总是被缩短。然后 SimpleXML 吐出一长串错误,例如:

标签ABC123

中的数据提前结束

预期的'>'

返回的 XML 的字符串长度最大为 4999。如果我将数据类型转换为 XML,然后转换为 VARCHAR,如下所示:

SELECT CONVERT(VARCHAR(MAX), CAST(XML_DATA AS xml))

然后我可以从字符串中挤出更多字符 - 最大长度为 5085。

铸造和转换只是一个疯狂的猜测。唯一可以证明的是,我不知道这些最大长度是从哪里来的,也不知道它们是什么意思。

如何检索完整的 XML 数据?是什么原因导致断线? PHP/PDO 还是 MS SQL 数据库?

有什么建议吗?

其他信息: 数据库是只读的。服务器正在运行 PHP 版本 5.2.17。安装了以下 PDO 驱动程序:sqlite、sqlsrv、mssql、mysql、odbc; MSSQL DB-lib 的 PDO 驱动程序:MSSQL_70。 XML 来自Amazon MWS

【问题讨论】:

  • 您是否检查过这些关于 pdo 和 mysql 的类似问题的答案?或许你能理解这个问题,看看是不是和mssql一样:stackoverflow.com/a/11663623/1606729stackoverflow.com/a/10455228/1606729
  • 不走运。在将 PDO::ATTR_EMULATE_PREPARES 设置为 false 后,我收到此错误消息:“SQLSTATE[IM001]:驱动程序不支持此功能:驱动程序不支持设置属性”我使用的是 PDO::query 而不是 PDO::prepare。那会有什么不同吗?
  • 我真的不知道,只是找到了这个链接的问题,希望它能帮助你:)
  • 感谢您的建议!我认为那里有一个简单的解决方案。毕竟,我只是想从数据库中检索信息。它应该与检索冗长的博客文章或你有什么相同。但我对 MS SQL 的了解还不够,无法理解这些警告,甚至不足以表达一个好的 Google 搜索。

标签: php xml sql-server-2008 pdo simplexml


【解决方案1】:

对于每个偶然发现这个问题的人来说,我找到的解决方法非常简单。 PHP.ini 默认将查询到的文本字段截断为 4096 字节。

两种补救方法:

  1. 在查询中更新您的文本限制

mssql_query("SET TEXTSIZE 2147483647");

  1. 在 php.ini 中永久更新文本大小(最大大小如下所示)

mssql.textlimit = 2147483647

mssql.textsize = 2147483647

来源SQL Server PHP and Truncating

【讨论】:

    【解决方案2】:

    here 的回答帮助我解决了 unbuntu 16.4、php7.2、MSSQL 使用 FreeTDS 解决方案的同样问题

    https://stackoverflow.com/a/38064487/2096951

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 2016-08-06
      • 1970-01-01
      相关资源
      最近更新 更多