使用 mssql 方法(FreeTDS、PHP 和 Apache 在 Mac OS X 上)

3

我已经在我的Mac上安装了FreeTDS,但是使用mssql_connect连接时出现了一些问题。

首先,当我运行tsql -C时,我看到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');

DSN_NAME匹配我在freetds.conf文件中指定的数据源时,我会收到一个错误信息:无法连接到服务器: DSN_NAME,这告诉我PHP没有正确地看到我的freetds.conf文件的路径。

然而,如果在我的调用之前添加:

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

然后一切都如预期运行。这告诉我我的freetds.conf文件格式正确。
我搜索了很多关于如何找到PHP认为freetds.conf文件所在路径的方法,但是我找不到。
最后,有一些原因使我不想直接使用IP地址进行连接,也不想被强制使用putenv()方法来指定目录。
有什么想法吗?
谢谢。

我已经修复了这个问题。我会在下面发布一个答案。 - tptcat
1个回答

1

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

解决方案是忘记MacPorts的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实例。如果您有多个实例,则在运行卸载时会收到通知,需要指定要卸载的版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接