2013-12-23 2 views
6

잠시 동안이 문제가 해결되지 않아 더 이상 얻을 수 없으며 많은 검색을했지만 아무것도하지 않았습니다. 작품 ... ODBC를 사용하여 PHP와 Microsoft SQL 데이터베이스에 연결하려고 해요. 다음PHP를 사용하여 MS 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을 사용하여 서버에 연결할 수 있습니다

[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"); 

모든 매개 변수는 이중 검사를 거쳤으며 정확합니다.

어떻게 성공적으로 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 :

[unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV failed 
: 다른 오류의 결과입니다

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

: 나는 내 ConnectionString을 변경

나는 그것을 다시 볼 수있을거야, 감사 vinodadhikary 다시

감사합니다.

업데이트 2 :

내 연결 문자열이 잘못, 그것은 있었어야 :

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

감사 vinodadhikary!

감사합니다. 당신이 Driver={CRMCONNECT};이 연결 문자열에 또한

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

: 이미 CRMCONNECTDSN가 정의되어 있기 때문에

답변

5

, 당신은 다음과 같은 연결 방법을 사용할 수 있습니다. 정의한대로 CRMCONNECT은 드라이버가 아니며 데이터 소스 이름입니다. 귀하의 경우 드라이버가 FreeTDS

+0

을 윈도우 10에서 제대로 작동한다는 것입니다 귀하의 대답을 주셔서 감사 드리며, 나는 수치스럽게도 나는 드라이버 대신 데이터 소스를 정의하고 있다는 것을 깨닫지 못했습니다. 나는 connectionstring을 변경하고 새로운 오류가 발생했습니다. 적어도 나는 이제 다른 오류를 보게되어 기쁘다 :-) 나는 그것을 조사 할 것이다. – peird

+0

'; Database = dbname;'을 연결 문자열에서 제거하고 답안에있는 것과 똑같이 유지하십시오. ODBC에 이미'Database' 옵션이 정의되어 있기 때문에 데이터베이스 이름을 전달할 필요가 없습니다. – vee

+0

Woops, 나는 그것을 놓쳤다. 그것은 지금 완전히 작동합니다, 많이 고마워요! – peird

0

PDO에도 적용됩니다. $conn = new PDO("odbc:CRMCONNECT"); 및 우리의 경우

1

내가 데비안 7.11에 PHP 7.1.9과 Laravel 5.5에서 같은 오류가 발생한에서

[Default] Driver = IBM i Access ODBC Driver 64-bit ODBC.INI

에서 기본 드라이버를 설정해야합니다.

실패 : "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}와 같은 데이터 소스가

+0

감사합니다. 그러나 한 시스템에서'{} '이 (가)있는 문자열은 다른 시스템에서와 같이 중괄호가없는 문자열이 작동하는 곳에서 작동합니다. –

+0

@i_v_harish 그 시스템의 차이를 말할 수 있습니까? –

관련 문제