我在我的开发机器 WinXPsp3 上编写了代码,它有 apache 独立 2.2.21。查询工作正常。
然后,我将 php 复制到我的生产机器 WinXPsp3 上,该机器安装了 apache 2.2 windows 和 php 5.3.5 windows 安装,并且是 SQL Server 机器,但是查询崩溃了。
我在生产机器上卸载了 apache 和 php,并从开发机器上复制了我的单机版本,但是当我启动 apache 时,我收到一个错误,即缺少 MSCPV100.dll。我安装了 MS C++ Redist,这个问题就消失了。
查询如下:
选择顶部 (50) [ID], (选择案例 当 [Location] 为空时,则为“未知” 当 [Location]='' THEN '未知' ELSE UPPER([位置]) END + ', ' as [text()] FROM dbo.[OtherTable] WHERE [OtherTable].[Key]=[Table].[ID] FOR XML path('')) AS 位置 从表
(这里的任何错误格式都不能反映我的实际查询,因为它适用于其他 apache 安装)
查询在 [text()] 之前的小写“AS”上阻塞,并带有“关键字'as'附近的语法不正确”。
该查询最初是大写的,并且有更多的字段,所以我使用小写,直到我发现失败描述正在谈论哪个“AS”。
我尝试用“''”替换 text() 周围的“[]”,但这没有帮助。
我知道的事实是真实的:
apache 安装是相同的。
php安装是相同的。
当通过在不同机器上安装相同的 apache托管时,查询工作正常。
apache/php 升级后,其他查询在生产机器上运行良好。
这些信息让我相信生产机器出了问题,而不是 apache、sql server、php 或查询。关于那可能是什么的任何想法?
有几件事我没有提到:
PHP 连接类型是 odbc。
两台机器上的 SQL Server ODBC 驱动程序都是 2000.85.1132.0,但生产机器上还有 SQL Server Native Client 10.0 版本 2007.100.2531.00。