2017-08-31 373 views
1

我用nginx/php5.6安装Centos7。 MS SQL 2008 R2正在另一台服务器上工作。 MSSQL绝对允许TCP连接,自定义(非域)用户,防火墙被禁用,我可以使用HeidiSQL连接到它并从另一台Windows机器进行设置。 我可以从Centos远程登录到MSSQL(我看到日志错误“网络数据包有效载荷中指定的长度与读取的字节数不匹配;连接已关闭,请与客户端库的供应商联系”。 MSSQL日志,所以这里没有错误)。从Centos7到mssql的连接错误

我无法使用php_mssql或sqlcmd从centos连接到mssql;

在SQLCMD:

Microsoft (R) SQL Server Command Line Tool 
Version 13.1.0007.0 Linux 

[[email protected]***]# /opt/mssql-tools/bin/sqlcmd -S *** -U *** 
Password: 
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login timeout expired. 
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : TCP Provider: Timeout error [258]. . 
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Unable to complete login process due to delay in prelogin response. 

在PHP互动:

php > mssql_connect('***:***', '***','***'); 
PHP Warning: mssql_connect(): Unable to connect to server: *** in php shell code on line 1 

我也试过TSQL/freetds的:

/etc/freetds.conf has section 
[myserver] 
     host = *** 
     port = *** 
     client charset = UTF-8 
     tds version = 8.0 //also tried 7 

[[email protected]*]# tsql -S myserver -U *** 
Password: 
locale is "en_US.UTF-8" 
locale charset is "UTF-8" 
using default charset "UTF-8" 
5 //begins to count, i could't understand what does it mean 

还试图清理这一切,并安装php7.0与sqlsrv扩展 - 同样的问题;

有一些网络很奇怪 - Centos serv和MSSQL位于不同的网络中,我无法从该服务器ping通mssql,但可以telnet,我在连接尝试期间使用ip而不是主机名,所以不要认为这是一个大问题。

现在我不知道该在哪里挖掘,有什么建议吗?

+0

您是否尝试过使用[PDO with dblib driver](http://php.net/manual/en/ref.pdo-dblib.php)?在使用php 5.6和MSSQL Server 2k8的debian上工作得很好... – Ayak973

+0

@ Ayak973谢谢你的想法,是的,同样的错误。但是问题解决了,这是由于网络配置错误造成的,我不明白它是如何实现的 - 建立telnet连接,但无法正常连接,但我们的IT人员在不到半个小时的时间内修复了这个问题。 – NiPh

回答

0

这是由于网络配置错误导致的,我不明白怎么可能 - 做telnet连接,但连接失败,但我们的IT人员在不到半个小时的时间内修复了这个问题。