3

我已经在我的 Mac 上安装了 FreeTDS,但我在使用mssql_connect.

首先,当我运行 tsql -CI 时,看到 freetds.conf 目录列为/opt/local/etc/freetds. 我在这个目录中有一个 freetds.conf 文件。

接下来,如果我这样连接:

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

然后一切都按预期工作。也就是说,我可以从我选择的任何数据库中检索、更新、插入数据mssql_select_db()

如果我尝试这样连接:

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

whereDSN_NAME匹配我的 freetds.conf 文件中指定的数据源,然后我收到一个错误,unable to connect to server: DSN_NAME它告诉我 PHP 没有正确看到我的 freetds.conf 文件的路径。

但是,如果在我打电话之前我添加:

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

然后一切都按预期工作。这告诉我我的 freetds.conf 文件格式正确。

我已经搜索了所有关于如何找到 PHP认为freetds.conf 文件所在的路径,但我找不到。

最后,有一些原因我不想在我的连接中直接使用 IP 地址,以及为什么我不想被迫使用putenv()指定目录的方法。

有任何想法吗?

谢谢你。

4

1 回答 1

1

当我安装 FreeTDS 时,我最初使用的是 MacPorts。我相信这给了我一些关于 freetds.conf 应该在哪里的冲突。即使运行时 freetds.conftsql -C的路径是我尝试使用的实际路径,但当我使用该路径编译 mssql.so 扩展时,PHP 无法识别它。

解决方案是忘记 MacPorts for FreeTDS,只从源代码安装 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 回答