我正在尝试使用 Ubuntu 16.04 服务器通过 PHP 5.6 连接到 MS SQL Server。我被迫使用此版本的 PHP,以确保与“古老”应用程序的兼容性。
我通过 ondrej 的 PPA 安装了 PHP 5.6 及其模块(pdo、pdo_mysql、readline 等),没有任何问题,但我无法找到并安装“mssql.so”我正在尝试运行的应用程序所需的模块包。
这就是为什么我决定使用 ODBC(和 PDO_ODBC)驱动程序来连接到数据库。
为了这样做,我安装了 freetds 和 unixodbc 并像这样配置我的文件:
'odbcinst.ini' 文件:
'odbc.ini' 文件:
最后是“freetds.conf”文件:
好吧,我想我所有的文件都配置好了,但接下来的部分开始有点奇怪,让我解释一下:当我尝试使用 tsql 连接到 MS SQL 数据库 和不在选项中提供密码,但在询问时输入密码,连接有效:
但是当我尝试提供与选项相同的密码 (-P) 时,它不起作用(我使用正确的密码至少尝试了 10 次)!!!
--> tsql 无法为用户“WIPSOS-PHP”打开 session
当我尝试将 isql 与我的连接器之一一起使用时,同样的问题发生了 我在“odbc.ini”文件中配置了:
这似乎是与密码有关,但我找不到问题,你能帮帮我吗?
最佳答案
我找到了部分答案,它与密码有效相关:当出现在为 tsql 命令的 -P 选项给出的密码中时,似乎特殊字符没有得到很好的解释。
因此,取决于您的 shell,您必须在完成选项的字符串中转义这些字符。在我的例子中,使用 bash,我不得不使用 '\' 来转义特殊字符:
tsql -S hostname -D Database -U User -P pa\$\$word
现在可以使用了!
但是当我尝试在 'odbc.ini' 文件中用 '\' 转义特殊字符时,它似乎仍然不起作用:
我的下一个问题是:“如何转义‘.ini’文件中的特殊字符?”或“我的配置有问题吗?”
编辑:我知道那是很久以前的事了,但我在“freetds.conf”文件中遇到了与主机名相关的配置问题。事实上,我使用的是服务器的本地网络 DNS 名称,而不是它的 IP 地址(这是可行的)。
我希望我的问题至少能帮助一些人,处理 TSQL 和 FreeTDS 并不容易......
关于tsql - FreeTDS - TSQL 在选项中给出密码时失败,但在键入时成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38454890/