3

Mac に FreeTDS をインストールしましたが、mssql_connect.

まず、tsql -CI を実行すると、freetds.conf ディレクトリが としてリストされていることがわかります/opt/local/etc/freetds。このディレクトリ内に freetds.conf ファイルがあります。

次に、次のように接続すると:

$connect = mssql_connect('IP_ADDRESS', 'username', 'password');

その後、すべてが期待どおりに機能します。つまり、 で選択した DB との間でデータを取得、更新、挿入できますmssql_select_db()

このように接続しようとすると:

$connect = mssql_connect('DSN_NAME', 'username', 'password');

where がDSN_NAMEfreetds.conf ファイルで指定されたデータソースと一致すると、エラーが発生しunable to connect to server: DSN_NAME、PHP が freetds.conf ファイルへのパスを正しく認識していないことがわかります。

ただし、電話をかける前に次のように追加します。

putenv("FREETDSCONF=/opt/local/etc/freetds/freetds.conf");

その後、すべてが期待どおりに機能します。これは、freetds.conf ファイルが正しくフォーマットされていることを示しています。

freetds.confファイルがあると PHP が判断するパスを見つける方法についてあちこち検索しましたが、見つかりません。

putenv()最後に、接続で IP アドレスを直接使用したくない理由と、ディレクトリを指定する方法を強制的に使用したくない理由がいくつかあります。

何か案は?

ありがとうございました。

4

1 に答える 1

1

FreeTDSをインストールしたとき、私はもともとMacPortsを使用していました。これにより、freetds.confがどこにあるべきかについていくつかの矛盾が生じたと思います。また、実行中のfreetds.confのパスtsql -Cは、使用しようとした実際のパスでしたが、そのパスを使用してmssql.so拡張機能をコンパイルすると、PHPはそれを認識しませんでした。

解決策は、FreeTDS用のMacPortsを忘れて、ソースからFreeTDSをインストールすることです。次に、PHPソースからmssql.so拡張機能をインストールし、システムにあるものと同じバージョンを使用していることを確認します(OS X Mountain Lionでは5.3.13でした)。

このブログの指示に正確に従えば、問題は発生しないはずです。

最後にいくつか:

  • 指示に記載されていてもMAMPを実行していないので、どちらの方法でも問題ありません。
  • すでにMacPorts経由でFreeTDSをインストールしている場合は、:sudo port uninstall freetds +odbcを使用してアンインストールしてからsudo port uninstall unixODBC。FreeTDSのすべてのインスタンスを必ずアンインストールしてください。複数ある場合は、アンインストールを実行すると、アンインストールするバージョンを指定する必要があるという通知が表示されます。
于 2012-08-08T03:40:44.390 に答える