php - CentOS 7上通过PHP连接远程SQL Server

标签 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
    

最后这是我的 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 (测试 FreeTDS)进行故障排除unixODBC) 两者都连接成功。这让我相信问题出在 PDO_ODBC 或 PHP 配置中的其他内容上。非常感谢任何帮助:)

最佳答案

因此,我通过命令行运行 PHP 脚本,将问题范围缩小到 Apache 服务器:$php/var/www/html/repo/index.php 并建立了连接成功了。

一位同事建议 SELinux 可能会干扰 httpd,并且运行 $setenforce 0 确实可以让我的 PHP 在通过 Web 浏览器请求它们时正常运行。

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

关于php - CentOS 7上通过PHP连接远程SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44248868/

相关文章:

PHP Phar - file_exists() 问题

c# - 连接数据库的完美方式?

c# - 从c#插入数据库

php - 多表单同处理页面

javascript - 加载特定于代码点火器 View 的独特 JavaScript 文件

sql - SQL Server 上的慢更新,即使没有记录更新

c# - 将 Microsoft SQL 数据库迁移/转换为 MongoDB 数据库的最佳方法?

ms-access - ODBC 连接到 Ubuntu 上的 MS-Access

r - 如何从 R 连接到 Azure SQL Server 数据库?

php - Laravel 5.1 如果记录存在于另一个表中则插入