【发布时间】: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 吐出一长串错误,例如:
标签ABC行123
中的数据提前结束预期的'>'
返回的 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/1606729和stackoverflow.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