我正在尝试编写一个PHP脚本,该脚本将使用PDO检索存储在MS SQL数据库中的XML数据,然后使用SimpleXML解析XML数据。
问题是检索XML数据会导致以下错误消息:
SQLSTATE [HY000]:常规错误:10007只能使用Unicode-collation或ntext数据中的Unicode数据无法使用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 V5.2.17。安装了以下PDO驱动程序:sqlite,sqlsrv,mssql,mysql,odbc;用于MSSQL DB-lib的PDO驱动程序:MSSQL_70。 XML来自Amazon MWS。
答案 0 :(得分:0)
对于遇到这个问题的每个人,我发现的修复非常简单。默认情况下,PHP.ini将查询的文本字段截断为4096字节。
两种补救方法:
mssql_query("SET TEXTSIZE 2147483647");
mssql.textlimit = 2147483647
mssql.textsize = 2147483647
答案 1 :(得分:-1)
答案here使用FreeTDS解决方案帮助我解决了unbuntu 16.4,php7.2,MSSQL的相同问题