我已关注this似乎是完全相同的问题的解决方案,但是我并没有像我希望的那样取得成功。 我为 PDO_ODBC、unixODBC 和 FreeTDS 包设置了所需的配置文件:
首先在
/etc/freetds.conf
中指定主机:[mssql] host = DBHost port = 1433 tds version = 7.3
然后通过在
/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
然后通过在
/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/