我已经在我的 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 文件中指定的数据源相匹配然后我得到一个错误并且 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()
方法来指定目录。
有什么想法吗?
谢谢。
最佳答案
当我安装 FreeTDS 时,我最初使用的是 MacPorts。我相信这让我对 freetds.conf 应该在哪里产生了一些冲突。即使运行 tsql -C
时 freetds.conf 的路径是我尝试使用的实际路径,当我使用该路径编译 mssql.so 扩展时,PHP 也无法识别它。
解决方案是忘记用于 FreeTDS 的 MacPorts,只从源代码安装 FreeTDS。然后从 PHP 源安装 mssql.so 扩展,并确保您使用的是系统上的相同版本(我的版本是 OS X Mountain Lion 下的 5.3.13)。
如果你follow the instructions at this blog确切地说,您不应该有任何问题。
最后几件事:
- 我没有运行 MAMP,尽管说明中提到了它,所以这两种方式都没有关系。
- 如果您已经通过 MacPorts 安装了 FreeTDS,请使用以下方法卸载:
sudo port uninstall freetds +odbc
,然后使用sudo port uninstall unixODBC
。确保卸载 FreeTDS 的所有实例。如果您有多个版本,您会在运行卸载时收到一条通知,提示您需要指定要卸载的版本。
关于php - 使用 mssql 方法(Mac OS X 上的 FreeTDS、PHP 和 Apache),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11846438/