连接到 MSSQL DB 的问题
Posted
技术标签:
【中文标题】连接到 MSSQL DB 的问题【英文标题】:Trouble With Connecting to MSSQL DB 【发布时间】:2015-11-03 17:32:39 【问题描述】:我有一个 Ubuntu 12.04 服务器,我正在尝试建立与 MSSQL 数据库的连接。
我已经设法使用tsql
和isql
进行连接,但是osql
不起作用并且使用PDO 连接php 也不起作用.. 我会尽力提供尽可能多的信息如果您需要更多信息,请告诉我,我会进行编辑。
freetds.conf:
[MSSQL]
host = TPSACC
port = 54488
tds version = 8.0
odbc.ini:
[MSSQL]
Description = MS SQL connection to PRODUCTION database
Driver = FreeTDS
Database = PRODUCTION
Server = TPSACC
UserName = sa
Password = pass
Trace = No
TDS_Version = 8.0
Port = 54488
odbcinst.ini:
[FreeTDS]
Description = ODBC for Microsoft SQL
Driver = /usr/local/lib/libtdsodbc.so
UsageCount = 1
Threading = 2
~> isql MSSQL sa 通
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
~> tsql -S MSSQL -U 'sa' -P 'pass'
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1>
~> osql -S MSSQL -U sa -P 通过
checking shared odbc libraries linked to isql for default directories...
strings: '': No such file
trying /tmp/sql ... no
trying /tmp/sql ... no
trying /etc ... OK
checking odbc.ini files
reading /home/toolplas/.odbc.ini
[MSSQL] not found in /home/toolplas/.odbc.ini
reading /etc/odbc.ini
[MSSQL] found in /etc/odbc.ini
found this section:
[MSSQL]
Description = MS SQL connection to PRODUCTION database
Driver = FreeTDS
Database = PRODUCTION
Server = TPSACC
UserName = sa
Password = pass
Trace = No
TDS_Version = 8.0
Port = 54488
looking for driver for DSN [MSSQL] in /etc/odbc.ini
found driver line: " Driver = FreeTDS"
driver "FreeTDS" found for [MSSQL] in odbc.ini
found driver named "FreeTDS"
"FreeTDS" is not an executable file
looking for entry named [FreeTDS] in /etc/odbcinst.ini
found driver line: " Driver = /usr/local/lib/libtdsodbc.so"
found driver /usr/local/lib/libtdsodbc.so for [FreeTDS] in odbcinst.ini
/usr/local/lib/libtdsodbc.so is an executable file
"Server" found, not using freetds.conf
Server is "TPSACC"
osql: no IP address found for "TPSACC"
在 PHP 中我有:
$conn = new PDO ("dblib:host=TPSACC;dbname=PRODUCTION","$username","$pw");
..或..
$conn = new PDO ("dblib:host=TPSACC;port=54488;dbname=PRODUCTION","$username","$pw");
他们都返回这个错误:
SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (severity 9)
我在这里被困了几天,无法弄清楚为什么只有一半的连接真正有效..
非常感谢任何和所有帮助,谢谢!
编辑:这与那个问题不同,我在评论中解释过,但会在这里重新发布:
对于那个问题,问题是端口从 1433 更改了。我的也更改了,我修复了这个问题,端口现在是 54488,并且由于更改,tsql 和 isql 一直在工作。但是还是没有解决osql和PHP的问题。
【问题讨论】:
PHP error connecting to MS SQL database using PDO_DBLIB 的可能重复项 对于那个问题是端口从 1433 更改。我的也更改了,我修复了这个,端口现在是 54488,因为更改 tsql 和 isql 一直在工作。但是,它仍然没有解决 osql 和 PHP 的问题。 【参考方案1】:osql
被您的配置中的某些东西窒息。 osql
是一个调试实用程序,它只检查您的配置,然后传递给 unixODBC 的 isql
进行连接 (http://linux.die.net/man/1/osql)。为您的 odbc.ini 试试这个:
[MSSQL]
Driver = FreeTDS
Description = MS SQL connection to PRODUCTION database
Server = tpsacc.yourfulldomain.com
Port = 54488
TDS_Version = 7.2
Database = PRODUCTION
UserName = sa
Password = pass
Trace = No
另外,您确定这是 libtdsodbc.so 的正确位置吗?当我使用 Ubuntu 14 x64 (utopic) 安装 freetds-dev 时,它会安装到 /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so;示例 odbcinst.ini:
[FreeTDS]
Description = v0.91 with protocol v7.2
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
为了更好地衡量,我使用的典型 freetds.conf:
# A typical Microsoft server
[MSSQL]
host = tpsacc.yourfulldomain.com
port = 54488
tds version = 7.2
FreeTDS 最多仅支持大多数语言的 TDS 版本 7.2。虽然使用“8.0”不应该破坏任何东西,但使用 7.2 更好地保持一致性。如果您需要查看参考,我这里有一个完整配置的 Vagrant 框,示例:https://github.com/FlipperPA/django-python3-vagrant/Good lucky!
【讨论】:
您好,感谢您的回复!很抱歉,但我有点困惑..“tpsacc.domain.com”..我没有附加域,我只能使用 TPSACC 或 IP 地址(10.0.1.2)。我还检查了你说的驱动程序的目录,驱动程序也在那里。所以我应该使用那个代替?即使它也在我之前的目录中? 当我将驱动程序更改为您告诉我的驱动程序时,我收到此错误/usr/lib/x86_64-lunix-gnu/odbc/libtdsodbc.so is not an executable file
..
Wups,对不起,我并不是说你一定要改变路径——只是值得研究一下。你是如何安装 FreeTDS 的?
我没有实际使用 tpsacc.domain.com,而是使用了一个带有 FQDN(完全限定域名)的示例。您也可以尝试使用 IP 地址代替它。
我已经尝试了 IP 地址,但仍然没有成功。我只是好奇 freetds.conf / odbc.ini / odbcinst.ini 是否对 PDO 有影响?如果是这样,那么为什么需要在 PHP(主机、数据库、端口等)中再次声明所有内容?老实说,我很久以前(几个月)安装了 FreeTDS,我不记得具体是如何安装的,我只知道我无法让 ./configure && make 工作......你认为我更好吗关闭清除 freetds 并从头开始?以上是关于连接到 MSSQL DB 的问题的主要内容,如果未能解决你的问题,请参考以下文章
PHP PDO 连接到具有集成安全性的 SQL Server?