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