【问题标题】:Connecting to remote SQL Server through PHP on CentOS 7在 CentOS 7 上通过 PHP 连接到远程 SQL Server
【发布时间】:2017-10-30 03:20:35
【问题描述】:

我已经关注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
    

最后是我的 PHP:

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

返回:“SQLSTATE[08S01] SQLConnect: 20009 [unixODBC][FreeTDS][SQL Server]Unable to connect: Adaptive Server 不可用或不存在”。

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

【问题讨论】:

    标签: php sql-server odbc freetds


    【解决方案1】:

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

    一位同事建议 SELinux 可能会干扰 httpd,果然运行 $setenforce 0 允许我的 PHP 在通过 Web 浏览器请求它们时正常运行。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 2021-05-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多