2014-04-08 12 views
5


Ich versuche, eine Verbindung zu einer Sybase (SQL Anywhere 12) Datenbank mit PHP-PDO herzustellen. Ich verbrachte Stunden damit, den richtigen Treiber und den richtigen DSN zu finden, ohne Erfolg. Jedes Mal, wenn ich versuche, einen einzelnen Parameter zu bearbeiten, erhalte ich immer Fehler. Ich habe zehn verschiedene Kombinationen von DSN-Parametern ausprobiert, nichts passiert. Ich werde hier nur ein paar berichten, nur um Ihnen ein Beispiel zu geben, was ich erreichen möchte.Proper DSN zum Verbinden mit Sybase mit PDO

ich PDO Treiber erfolgreich installiert - von php.ini:

PDO drivers  dblib, mysql, odbc, pgsql 

PDO Driver for FreeTDS/Sybase DB-lib  enabled 
Flavour          freetds 

DB params:

Die IP für die DB ist 192.168.100.234 und sowohl die db-Instanz und db Namen sind GAMMA01 . Ich kann Ihnen nicht den Benutzernamen und das Passwort sagen, aber sagen wir: Benutzer dba und pwd allright.
Ich kann den Server vom Server aus anpingen, wo ich versuche, die Verbindung zu starten.

Ich bin unter Linux Debian Squeeze und PHP 5.3.3.

DBLIB:

Ich bin nicht in der Lage die richtige DSN zu finden, um zu verwenden, um meinen Datenbank-Server zu verbinden.

DSN Version 1:

'dblib:host=192.168.100.234;DBN=GAMMA01' 

DSN Version 2:

'dblib:host=192.168.100.234;DBN=GAMMA01;UID=dba;PWD=allright;Server=GAMMA01;ASTART=No' 

DSN Version 3:

new PDO('dblib:host=192.168.100.234;dbname=GAMMA01', 'dba', 'allright'); 

Fehler ich

SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (severity 9) 

FreeTDS Fehlerprotokoll (versuchen, mit beiden Versionen 5.0 und 7.0, kein Unterschied):

log.c:190:Starting log file for FreeTDS 0.82 
     on 2014-04-08 13:40:40 with debug flags 0x4fff. 
iconv.c:363:iconv to convert client-side data to the "ANSI_X3.4-1968" character set 
iconv.c:516:tds_iconv_info_init: converting "US-ASCII"->"UCS-2LE" 
iconv.c:516:tds_iconv_info_init: converting "ISO-8859-1"->"UCS-2LE" 
net.c:210:Connecting to 192.168.100.234 port 5200 (TDS version 7.0) 
net.c:264:tds_open_socket: connect(2) returned "Operation now in progress" 
net.c:299:getsockopt(2) reported: Connection refused 
util.c:334:tdserror(0xb9a46eb0, 0xb9b60688, 20009, 115) 
dblib.c:7782:dbperror(0xb9b5ff88, 20009, 115) 
dblib.c:7835:20009: "Unable to connect: Adaptive Server is unavailable or does not exist" 
dblib.c:5627:dbgetuserdata(0xb9b5ff88) 
dblib.c:7856:"Unable to connect: Adaptive Server is unavailable or does not exist", client returns 2 (INT_CANCEL) 
util.c:368:tdserror: client library returned TDS_INT_CANCEL(2) 
util.c:389:tdserror: returning TDS_INT_CANCEL(2) 
net.c:310:tds_open_socket() failed 
dblib.c:1372:dbclose(0xb9b5ff88) 
dblib.c:256:dblib_del_connection(0xb5ceea00, 0xb9b60688) 
mem.c:563:tds_free_all_results() 
dblib.c:303:dblib_release_tds_ctx(1) 
dblib.c:5727:dbfreebuf(0xb9b5ff88) 
dblib.c:718:dbloginfree(0xb9b46588) 

Mit sybase: DSN:

'sybase:host=192.168.100.234;dbname=GAMMA01, dba, allright' 

Fehler:

could not find driver 

ODBC:
Ich bin nicht in der Lage mit ODBC-Treiber zu verbinden. Ich habe den Leitfaden hier gelesen: http://www.sybase.com/files/White_Papers/PHP_SQL_Anywhere.pdf und heruntergeladen das richtige .so-Paket hier: http://scn.sap.com/docs/DOC-40537 aber ich kann nicht PHP das Paket erkennen, laden und verwenden es.

DSN:

'odbc:Driver={Sybase SQL Anywhere 12};NA=192.168.100.234,5200;Uid=dba;Pwd=allright;' 
'odbc:Driver={SQL Anywhere 12};NA=192.168.100.234,5200;Uid=dba;Pwd=allright;' 
'odbc:DRIVER={Sybase SQL Anywhere 12};SRVR=192.168.100.234;DB=gamma01;UID=dba;PWD=allright;' 
'odbc:DRIVER={Sybase SQL Anywhere 12};HOSTNAME=192.168.100.234;DATABASE=gamma01;UID=dba;PWD=allright;PROTOCOL:TCPIP' 

Fehler erhalte ich:

SQLSTATE[IM002] SQLDriverConnect: 0 [unixODBC][Driver Manager]Data source name not found, and no default driver specified 

Welche Treiber sollte ich Sybase DB verbinden verwenden? Welches ist die richtige DSN?

+0

Ich bin mir ziemlich sicher, dass der Port enthalten sein muss, unabhängig davon, welche DSN Sie verwenden (die letzten beiden DSN-Einträge es nicht enthalten) –

+0

Wenn ich den Port angeben (5200) die Problem ist immer das Gleiche. –

Antwort

0

Die "Data source name not found and no default driver specified." Fehler bedeutet, dass die DSN oder Treiber Sie angeben können nicht in der odbc.ini Datei für Ihre ODBC-Umgebung gefunden werden.

Sie müssen sicherstellen, dass Ihre ODBC-Umgebung ordnungsgemäß eingerichtet ist. In der Regel enthält dies eine Spezifikation für den Speicherort und den Dateinamen der Datei odbc.ini.

Nach wird versucht, eine Verbindung, die Datei odbc.ini einen passende Data Source Namen (DSN)

In Ihrem Fall zu finden, durchsucht wird, geben Sie an einen „Treiber“. Dies ist eine ähnliche Konfiguration, die normalerweise in der Datei odbcinst.ini gefunden wird; auch von Ihrer ODBC-Umgebung angegeben.

Eine andere Sache, nach der Sie suchen sollten, ist sicherzustellen, dass die ODBC-Umgebung vom laufenden Prozess gefunden wird oder Benutzer für Ihre PHP-App besitzt.

Der Schlüssel ist herauszufinden, welcher Teil der Verbindungssequenz fehlschlägt. In Ihrem Fall wäre eine erfolgreiche Verbindung folgen Sie diesem Pfad:

  1. Anwendung gestartet wird
  2. ODBC-Verbindung wird versucht
  3. ODBC Environment wird durchsucht, um die Konfigurationsdatei (in der Regel odbcinst.ini für „Driver“ Konfigurationen zu finden)
  4. Findet eine Übereinstimmung für den angegebenen Wert für "Driver =" in der Verbindungszeichenfolge
  5. Die Verbindung wird mit den im Abschnitt "Driver" konfigurierten Werten zusammen mit anderen in der Verbindungszeichenfolge angegebenen Optionen versucht.

Die beiden wichtigsten Dinge, die den Fehler, den Sie bekommen sind diese verursachen:

  1. ODBC Environment ist nicht konfiguriert
  2. Der DSN oder Treiber-Wert nicht richtig geschrieben.

Ich hoffe, das hilft.

Tony Hall

Verwandte Themen