FreeTDS - TSQL 在选项中给出密码时失败,但在键入时成功?

FreeTDS - TSQL fails when password given in option, but succeeds when typed?

我正在尝试通过 PHP 5.6 和 Ubuntu 16.04 服务器连接到 MS SQL 服务器。我被迫使用此版本的 PHP,以确保与 'ancient' 应用程序的兼容性。

我通过 ondrej 的 PPA 安装了 PHP 5.6 及其模块(pdo、pdo_mysql、readline 等),没有任何问题,但我无法找到并安装我正在尝试运行的应用程序所需的 'mssql.so' 模块包。

这就是为什么我决定使用 ODBC(和 PDO_ODBC)驱动程序 来连接数据库的原因。

为了这样做,我安装了 freetdsunixodbc 并像这样配置我的文件:

'odbcinst.ini' 文件:

'odbc.ini' 文件:

最后是 'freetds.conf' 文件:

好的,我想我所有的文件都配置好了,但接下来的部分开始有点奇怪,让我向你解释一下:当我尝试 连接到 MS SQL使用 tsql 的数据库未在选项 中提供密码,但在询问时输入密码,连接有效:

但是当我尝试提供与选项相同的密码 (-P) 时,它不起作用(我至少尝试了 10 次并使用正确的密码) !!!

--> tsql 无法为用户打开会话 'WIPSOS-PHP'

当我尝试将 isql 与我的连接器之一一起使用时,同样的问题发生了 我在 'odbc.ini' 文件中配置了:

似乎与密码有关,但我找不到问题,你能帮我吗?

我找到了部分答案,它与密码有效相关:似乎 特殊字符没有很好地解释 当出现在为 -P 选项提供的密码中时tsql 命令。

因此,取决于您shell,您必须转义完成选项的字符串中的这些字符。在我的例子中,使用 bash,我不得不使用 '\' 来转义特殊字符:

tsql -S hostname -D Database -U User -P pa$$word

现在可以使用了!

但是当我尝试在 'odbc.ini' 文件中用 '\' 转义特殊字符时,它似乎仍然不起作用:

我的下一个问题是:'How to escape a special character in a '.ini' 文件 ?''Is there something wrong in my configuration ?'

编辑:我知道那是很久以前的事了,但我在 "freetds.conf" 文件中遇到了与主机名相关的配置问题。事实上,我使用的是服务器的本地网络 DNS 名称而不是其 IP 地址(有效)。

我希望我的问题至少能帮助一些人,处理TSQL和FreeTDS并不容易...