このコードは、Apache スタンドアロン 2.2.21 を搭載した開発マシン WinXPsp3 で作成しました。クエリはうまくいきました。
次に、php 5.3.5 Windows インストールで apache 2.2 Windows インストールがあり、SQL Server マシンである本番マシン WinXPsp3 に php をコピーしましたが、クエリがクラッシュしました。
本番機のapacheとphpをアンインストールし、開発機からスタンドアローン版をコピーしたのですが、apacheを起動するとMSCPV100.dllが無いというエラーが出ました。MS C++ Redist をインストールしたところ、その問題はなくなりました。
クエリは次のとおりです。
セレクトトップ (50) [ID]、 (SELECT ケース WHEN [場所] が null の場合は「不明」 WHEN [場所]='' THEN '不明' ELSE UPPER([場所]) END + ', ' as [text()] FROM dbo.[OtherTable] WHERE [OtherTable].[Key]=[Table].[ID] FOR XML path('')) AS ロケーション FROM テーブル
(ここでのフォーマットの誤りは、他のApacheインストールで機能するため、実際のクエリを反映したものではありません)
クエリは、[text()] の前の小文字の「AS」で「キーワード 'as' 付近の構文が正しくありません」と詰まる。
クエリはもともと大文字で、さらに多くのフィールドがあったため、失敗の説明がどの「AS」について話しているかがわかるまで小文字を使用しました。
text() の前後の "[]" を "''" に置き換えてみましたが、うまくいきませんでした。
私が真実であると知っている事実:
Apache のインストールは同じです。
PHPのインストールは同じです。
クエリは、別のマシンにインストールされた同じ apache を介してホストされている場合に正常に機能します。
apache/php のアップグレード後、他のクエリは本番マシンで正常に動作しています。
この情報から、Apache、SQL サーバー、PHP、またはクエリではなく、運用マシンに問題があると思われます。それが何であるかについてのアイデアはありますか?
私が言及しなかったいくつかのこと:
PHP 接続タイプは odbc です。
両方のマシンの SQL Server ODBC ドライバーは 2000.85.1132.0 ですが、運用マシンには SQL Server Native Client 10.0 バージョン 2007.100.2531.00 もあります。