1

PHP 5.2.13 がインストールされた UNIX サーバーがあり、2 つの SQL サーバーにアクセスできます (1 つは MSSQL SERVER 2000 を実行し、もう 1 つは MSSQL 2005 を実行しています)。

FreeTDS を使用します - 詳細:

  • バージョン: freetds v0.82
  • freetds.conf ディレクトリ: /usr/local/etc
  • MS db-lib ソースの互換性: いいえ
  • Sybase バイナリ互換性: いいえ
  • スレッドセーフ: はい
  • iconv ライブラリ: はい
  • TDS バージョン: 8.0
  • iODBC: いいえ
  • unixodbc: はい

そして、私はunixODBC-2.3.1を使用しています

MSSQL 2000 サーバーは問題ありません。すべての SQL ステートメントを実行でき、MySQL の場合と同じように mssql_num_rows と mssql_fetch_assoc を使用できます。

ただし、MSSQL 2005 サーバーは mssql_num_rows または mssql_fetch_assoc では機能しません。odbc_fetch_row を使用する必要があります。

それは実際には問題ではありません。サーバーのインストールが異なるためだと思います。

ただし、MSSQL 2005 サーバーには大きな問題があります。別の名前としてフィールドを選択できません!

例えば:

SELECT
   [EnquiryID] AS "The_Key"
   FROM [db].[dbo].[table]

管理アプリケーション (つまり、PHP ではない) では正常に動作しますが、PHP 環境で同じものを実行すると、次のようになります。

stdClass Object
(
    [PK_EnquiryID] => 1
)

あなたはそれがすべきであることがわかります[The_Key] => 1

どうすればこれを回避できるか、誰か知っていますか?髪をかきむしる!

乾杯

ニール

4

2 に答える 2

1

これはfreeTDSリストで回答されたと思いますが、問題はPHPです。これは、ODBCを誤って呼び出すため、この場合に必要なラベルではなく、ベーステーブル名を取得します。

于 2012-05-30T09:23:36.607 に答える
0

これは決して完璧な解決策ではなく、この問題に対処する適切な方法を学びたいと思っていますが、それまでの間、追加してください

+''
基になる列名の後、ただし AS エイリアスの前に各列に追加すると、この問題を回避できるはずです。

于 2012-10-18T18:04:08.933 に答える