使用PHP连接到MS SQL数据库:未找到数据源名称,并且未指定默认驱动程序

使用PHP连接到MS SQL数据库:未找到数据源名称,并且未指定默认驱动程序,php,sql-server,odbc,freetds,Php,Sql Server,Odbc,Freetds,我被这个问题困扰了一段时间,我只是无法进一步了解,我做了很多搜索,但没有任何效果。。。我正在尝试使用odbc通过php连接到Microsoft SQL数据库 所有设置如下所示(文件中“”之间的值正确): /etc/odbc.ini: [CRMCONNECT] Description = "CRMConnect" Driver = FreeTDS Trace = No Servername = CRMSERVER Database = "dbname" UserName = "username"

我被这个问题困扰了一段时间,我只是无法进一步了解,我做了很多搜索,但没有任何效果。。。我正在尝试使用odbc通过php连接到Microsoft SQL数据库

所有设置如下所示(文件中“”之间的值正确):

/etc/odbc.ini:

[CRMCONNECT]
Description = "CRMConnect"
Driver = FreeTDS
Trace = No
Servername = CRMSERVER
Database = "dbname"
UserName = "username"
Password = "password"

[Default]
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
/etc/odbcinst.ini:

[FreeTDS]
Description = tdsodbc
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
CPTimeout       = 5
CPReuse         = 5
FileUsage       = 1
/etc/freetds/freetds.conf:

[CRMSERVER]
host = xxx.xxx.xxx.xxx 
port = 1433
tds version = 8.0
我反复检查了主机多次,结果是正确的。我也尝试了tds 7.0版,但没有成功

我可以使用isql成功连接到服务器:

root@crmart-web004:/# isql -v CRMCONNECT "user" "pass"
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>
但使用php时,我无法使其正常工作,出现以下错误:

[unixODBC][Driver Manager]Data source name not found, and no default driver specified 
我的连接字符串:

$connection = odbc_connect("Driver={CRMCONNECT};Server=xxx.xxx.xxx.xxx;Database=dbname;","username","password");
所有参数都经过双重检查且正确无误

为什么我可以成功地连接到isql,但在php中却失败了

我的php版本:

PHP Version 5.4.4-14+deb7u5
odbcinst配置:

unixODBC 2.2.14
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
我希望有人知道什么地方出了问题

提前谢谢

问候

更新:

我将连接字符串更改为:

$connection = odbc_connect("CRMCONNECT;Database=dbname;","user","pass");
这将导致另一个错误:

[unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV failed
我会调查的,再次感谢维诺达卡

问候

更新2:

我的连接字符串错误,应该是:

$connection = odbc_connect("CRMCONNECT","user","pass");
谢谢vinodadhikary


祝您节日快乐。

既然您已经定义了
CRMCONNECT
DSN
,您可以使用以下连接方法:

$connection = odbc_connect("CRMCONNECT","username","password");

在连接字符串中还有
Driver={CRMCONNECT}
CRMCONNECT
正如您定义的,它不是驱动程序,而是数据源名称。在您的情况下,驱动程序将是
FreeTDS

这同样适用于PDO<代码>$conn=新PDO(“odbc:CRMCONNECT”)
并确保在odbc.ini中设置默认驱动程序

[默认值]

Driver=IBM i Access ODBC驱动程序64位
在我们的例子中

我在Debian 7.11上的Laravel 5.5和PHP7.1.9中遇到了相同的错误。通过在DSN中删除驱动程序名称中的大括号修复了此问题:

失败:
“odbc:Driver={fail};Server=host;Database=db;”

已工作:
“odbc:Driver=success;Server=host;Database=db;”

另一个工作选项是将数据源配置从此字符串移动到odbc.ini中,然后引用它:
“odbc:odbc\u ini\u data\u source\u name”


有趣的是,在Windows 10下,使用
Driver={SQL Server}
(带花括号)的同一数据源可以正常工作。

谢谢你的回答,遗憾的是我没有意识到我定义的是数据源而不是驱动程序。我更改了连接字符串并出现新错误。至少我很高兴现在看到了另一个错误:-)我将对此进行研究。尝试删除
;数据库=dbname从你的连接字符串,只是保持它完全一样,我在我的答案。您不需要传入数据库名称,因为ODBC已经定义了
数据库
选项。谢谢。但是,在一个系统上,带有
{}
的字符串起作用,而在另一个系统上,没有花括号的字符串起作用。@i\u v\u harish您能告诉我这些系统之间的区别吗?