2013-12-23 5 views
6

Ich bin mit diesem Problem für eine Weile fest und ich kann einfach nicht weiter kommen, ich habe viele Suchen, aber nichts funktioniert ... Ich versuche, eine Verbindung zu einer Microsoft SQL-Datenbank mit PHP mit ODBC herzustellen.Verbinden mit MS SQL-Datenbank mit PHP: Datenquellenname nicht gefunden, und kein Standardtreiber angegeben

alles eingerichtet ist, wie folgt (die Werte zwischen "" in der Datei korrekt sind):

/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 

Ich überprüfe den Host mehrmals und es ist korrekt. Ich habe auch tds Version 7.0 versucht, aber kein Glück.

Ich kann erfolgreich an den Server mit isql verbinden:

[email protected]:/# isql -v CRMCONNECT "user" "pass" 
+---------------------------------------+ 
| Connected!       | 
|          | 
| sql-statement       | 
| help [tablename]      | 
| quit         | 
|          | 
+---------------------------------------+ 
SQL> 

Aber mit php Ich kann es einfach nicht arbeiten lassen, erhalte ich die folgende Fehlermeldung:

[unixODBC][Driver Manager]Data source name not found, and no default driver specified 

My Connectionstring:

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

Alle Parameter sind doppelt geprüft und korrekt.

Wie kann ich erfolgreich mit isql verbinden, aber es scheitert in PHP?

Meine PHP-Version:

PHP Version 5.4.4-14+deb7u5 

odbcinst Konfiguration:

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 

Ich hoffe, dass jemand eine Idee hat, was falsch sein könnte.

Vielen Dank im Voraus

Grüße

UPDATE:

ich meine Connectionstring geändert:

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

, die in einem anderen Fehler resultierende:

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

Ich werde in das, danke nochmal schauen vinodadhikary

Grüße.

UPDATE 2:

Meine Verbindungszeichenfolge falsch war, sollte es gewesen sein:

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

Dank vinodadhikary!

Grüße und schöne Ferien.

Antwort

5

Da Sie bereits CRMCONNECTDSN definiert haben, können Sie die folgende Verbindungsmethode verwenden:

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

auch in Ihrer Verbindungszeichenfolge Sie Driver={CRMCONNECT}; haben. CRMCONNECT Wie Sie festgelegt haben, ist dies kein Treiber, sondern ein Datenquellenname. Der Treiber in Ihrem Fall wäre FreeTDS

+0

richtig unter Windows gearbeitet Vielen Dank für Ihre Antwort, eine Schande, dass ich nicht erkannt habe, dass ich eine Datenquelle anstelle eines Treibers definiert habe. Ich habe die Verbindungszeichenfolge geändert und einen neuen Fehler erhalten. Zumindest bin ich froh, dass ich jetzt einen anderen Fehler sehe :-) Ich werde das untersuchen. – peird

+0

Versuchen Sie '' Database = dbname; ''aus Ihrer Verbindungszeichenfolge zu entfernen und behalten Sie es genauso wie in meiner Antwort. Sie müssen den Datenbanknamen nicht übergeben, da ODBC bereits die Option 'Database' definiert hat. – vee

+0

Woops, das habe ich verpasst. Es funktioniert jetzt total, vielen Dank! – peird

0

Das gleiche gilt für PDO. $conn = new PDO("odbc:CRMCONNECT"); und sicher sein, Ihren Standardtreiber in odbc.ini

[Default] Driver = IBM i Access ODBC Driver 64-bit in unserem Fall

1

Ich hatte den gleichen Fehler in Laravel 5.5 mit PHP 7.1.9 auf Debian 7,11 einzustellen. Reparieren sie durch Entfernen geschweiften Klammer vom Fahrernamen in DSN:

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

Arbeitet: "odbc:Driver=success;Server=host;Database=db;"

Eine weitere Arbeits Option bewegte Datenquellenkonfiguration aus dieser Zeichenfolge in odbc.ini und dann Referenzierung: "odbc:odbc_ini_data_source_name"

das Komische ist, dass die gleiche Datenquelle mit Driver={SQL Server} (mit geschweiften Klammern) 10.

+0

Danke dafür. Auf einem System funktionierte die Zeichenkette mit '{}' jedoch wo auf einem anderen System, die ohne die geschweiften Klammern funktionierte. –

+0

@i_v_harish können Sie den Unterschied zwischen diesen Systemen unterscheiden? –

Verwandte Themen