在CentOS 7上通过PHP连接到远程SQL Server

时间:2017-05-29 18:51:15

标签: php sql-server odbc freetds

我已经遵循了this解决方案似乎是完全相同的问题,但是我没有像我希望的那样取得如此大的成功。 我为PDO_ODBC,unixODBC和FreeTDS包设置了所需的配置文件:

  1. 首先在/etc/freetds.conf中指定主机:

    [mssql]
    host = DBHost
    port = 1433
    tds version = 7.3
    
  2. 然后在/etc/odbcinst.ini中指定FreeTDS驱动程序位置:

    [freetds]
    Description = Ms SQL database access with Free TDS
    Driver64 = /usr/lib64/libtdsodbc.so.0
    Setup64 = /usr/lib64/libtdsS.so.2
    FileUsage = 1
    UsageCount = 1
    
  3. 然后在/etc/odbc.ini中指定DSN:

    [mssql]
    Description = mssql server
    Driver = FreeTDS
    Database = CET_PhonesDB
    ServerName = mssql
    TDS_Version = 7.3
    
  4. 最后这是我的PHP:

     try {
            $pdo = new PDO('odbc:mssql', 'dbuser', 'dbpass');
     }
     catch(Exception $e){
            echo $e->getMessage();
     }
    

    返回:" SQLSTATE [08S01] SQLConnect:20009 [unixODBC] [FreeTDS] [SQL Server]无法连接:Adaptive Server不可用或不存在"。

    我已尝试使用$tsql -S mssql -U dbuser -P dbpass(测试FreeTDS)和$isql mssql dbuser dbpass(测试unixODBC)进行故障排除,两者都成功连接。这让我相信问题出在PDO_ODBC或PHP配置中的其他内容。非常感谢任何帮助:)

2 个答案:

答案 0 :(得分:2)

所以我通过命令行运行我的PHP脚本将问题缩小到Apache服务器:$php /var/www/html/repo/index.php并且连接成功。

同事建议SELinux可能会干扰httpd,并确保运行$setenforce 0允许我的PHP在通过网络浏览器请求时正常运行。

由于永久禁用SELinux是一个 非常糟糕 的想法,我做了一些摆弄和挖掘,感谢this手册,我发现$sudo setsebool -P httpd_can_network_connect 1允许Apache运行的脚本创建自己的网络连接。现在SELinux应该让httpd执行的任何PHP脚本创建网络连接。

答案 1 :(得分:0)

我遇到了同样的问题并通过使用自定义端口解决了它:port = XXXXX在freetds.conf中。应在SQL Server配置管理中配置此端口 SQL Server网络配置 - > TCP / IP(已启用) - > IP地址 - > IPAll - > TCP动态端口 https://msdn.microsoft.com/en-us/library/ms177440.aspx