2013-12-23 38 views
6

我堅持這個問題了一會兒,我不能再得到任何,我做了很多的搜索,但沒有的作品...我試圖用php連接到Microsoft SQL數據庫使用odbc。連接到MS SQL數據庫,PHP:數據源名稱未找到,也沒有指定默認驅動程序

一切都成立,如下(在 「」 的值是在該文件中正確):

/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連接到服務器:

[email protected]:/# 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 

我的ConnectionString:

$connection = odbc_connect("Driver={CRMCONNECT};Server=xxx.xxx.xxx.xxx;Database=dbname;","username","password"); 

所有參數都doublechecked和正確。

我怎樣才能成功地與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 

我希望有人有一個想法可能是錯誤的。

在此先感謝

問候

UPDATE:

我改變了我的ConnectionString到:

$connection = odbc_connect("CRMCONNECT;Database=dbname;","user","pass"); 

這導致另一個錯誤:

[unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV failed 

我會尋找到的是,再次感謝vinodadhikary

問候。

更新2:

我的連接字符串是錯誤的,它應該是:

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

感謝vinodadhikary!

問候和節日快樂。

回答

5

既然你已經有CRMCONNECTDSN定義,你可以使用下面的連接方法:

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

而且在連接字符串中你有Driver={CRMCONNECT};。您定義的CRMCONNECT不是驅動程序,而是數據源名稱。您的案例中的驅動程序將是FreeTDS

+0

工作正常感謝您的回答,我很遺憾沒有意識到我正在定義一個數據源而不是一個驅動程序。我改變了連接字符串,並得到一個新的錯誤。至少我很高興我現在看到了另一個錯誤:-)我會研究這個問題。 – peird

+0

嘗試從你的連接字符串中刪除'; Database = dbname;'並且保持它與我的答案完全一樣。您不需要傳入數據庫名稱,因爲ODBC已經定義了「數據庫」選項。 – vee

+0

Woops,我錯過了。它現在完全有效,非常感謝! – peird

0

這同樣適用於PDO。 $conn = new PDO("odbc:CRMCONNECT");並且一定要設置的odbc.ini

[Default] Driver = IBM i Access ODBC Driver 64-bit默認的驅動程序在我們的例子

1

我有同樣的錯誤在Laravel 5.5 PHP 7.1.9 Debian的7.11。

失敗:"odbc:Driver={fail};Server=host;Database=db;"

任職:"odbc:Driver=success;Server=host;Database=db;"

另一個工作選項被從該字符串中的odbc.ini移動數據源配置,然後引用它通過驅動程序的名稱在DSN去除大括號固定它: "odbc:odbc_ini_data_source_name"

有趣的是,與Driver={SQL Server}同一數據源(用大括號)的Windows 10下

+0

謝謝你。然而,在一個系統上,帶有「{}」的字符串在不同的系統上工作,沒有大括號的系統工作。 –

+0

@i_v_harish你能分辨這些系統之間的區別嗎? –

相關問題