无法从 OSX Apache/PHP 连接到远程 MSSQL


Cannot connect to remote MSSQL from OSX Apache/PHP

我正在为一个客户端构建一个站点,该站点涉及与SQL Server 2012上运行的一些内部数据库进行交互。我正在尝试通过开发环境启动并运行,并尝试连接到在虚拟框运行的Windows 7 VM上运行的SQLEXPRESS的MSSQL 2012实例。虚拟机有自己的 IP 地址,我可以使用 SQuirreL SQL 和 JDBC 驱动程序从我的 Mac 连接到它,因此我知道服务器已正确配置为允许远程连接。

但是,我

尝试在Mac上通过PHP进行连接所做的一切都失败了,它开始驱使我绕弯!!

我正在使用 ADODB 尝试连接并尝试与 mssql 和 odbc_mssql 驱动程序连接,但每次都失败并出现未公开的错误(我尝试启用调试)。这是我的代码:

$_dba = @NewADOConnection('myssql');
$_dba->debug = true;
$_dba->Connect('192.168.1.10', 'sa', 'password', 'database');

我已经使用 XDebug 逐步完成了所有代码,它不会在任何地方失败,发生的所有事情只是它调用返回 false 的mssql_connect。

我从以下位置使用 PHP 安装:

http://php-osx.liip.ch/

这包括 mssql 模块和我的 php 的输出.ini是:

  • 已启用 MSSQL 支持
  • 活动持久链接 0
  • 活动链接 0
  • 库版本 FreeTDS
  • mssql.allow_persistent 开启
  • mssql.batchsize 0 0 mssql.charset UTF-8 UTF-8
  • mssql.compatability_mode 关闭 mssql.connect_timeout 5 5
  • mssql.datetimeconvert On On mssql.max_links Unlimited Unlimited
  • mssql.max_持久无限无限
  • mssql.max_procs Unlimited Unlimited Unlimited mssql.min_error_severity 10 10
  • mssql.min_message_severity 10 10 mssql.secure_connection关闭
  • mssql.textlimit Server default Server default mssql.textsize Server
  • 默认
  • 服务器默认 mssql.timeout 60 60

sql.safe_mode也设置为"关"。

我已经测试了使用"tsql -H -p -U",它有效,以及使用"tsql -S CON1",它也可以工作,来自我的freetds.conf的CON1:

[CON1]
    host = 192.168.1.10
    port = 1433
    tds version = 8.0

我不确定它是否有区别,但 FreeTDS 是在 PHP 之后安装的,我必须安装它才能显示配置文件。

我还尝试使用msyql_connect()简单地测试我能想到的连接细节的所有可能组合:

mssql_connect('192.168.1.10:1433', 'sa', 'password');
mssql_connect('''''192.168.1.10:1433', 'sa', 'password');
mssql_connect('''''192.168.1.10''SQLEXPRESS:1433', 'sa', 'password');
mssql_connect('192.168.1.10', 'sa', 'password');
mssql_connect('''''192.168.1.10', 'sa', 'password');
mssql_connect('''''192.168.1.10''SQLEXPRESS', 'sa', 'password');

我敢肯定,我也错过了其他一些,但它们都不起作用。

老实说,我完全不知道接下来该尝试什么。我希望这里有人能够为我提供更多信息。

非常感谢您的帮助

我一发布这个,我就找到了问题的来源,我的PHP安装找不到FREETDS配置文件,为了解决这个问题,我已经设置了:

putenv('FREETDSCONF=/usr/local/etc/freetds.conf');

我需要为此找到一个更永久的工作(可能只是重建 PHP),但无论如何它现在都在工作。

非常感谢