2014-04-08 13 views
5


Sto provando a connettermi a un database Sybase (SQL Anywhere 12) utilizzando PDO di PHP. Ho passato ore a cercare di trovare il driver e il DSN corretti da usare, senza alcun successo. Ogni volta che provo a modificare un singolo parametro ottengo sempre errori. Ho provato decine di combinazioni diverse di parametri DSN, non succede nulla. Riporterò qui solo alcuni solo per darti un esempio di ciò che sto cercando di ottenere.DSN corretto per connettersi a Sybase tramite PDO

Ho installato con successo i driver DOP - da php.ini:

PDO drivers  dblib, mysql, odbc, pgsql 

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

DB params:

Il IP per il DB è 192.168.100.234 e sia il DB di istanza e il nome del db sono GAMMA01 . Non posso dirti username e password, ma diciamo: user dba e pwd allright.
Posso eseguire il ping del server dal server in cui provo ad avviare la connessione.

Sono sotto Linux Debian Squeeze e PHP 5.3.3.

DBLIB:

io non sono in grado di trovare il DSN corretto da utilizzare per connettersi al server di database.

DSN versione 1:

'dblib:host=192.168.100.234;DBN=GAMMA01' 

DSN versione 2:

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

DSN versione 3:

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

errore ottengo

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

FreeTDS log degli errori (cercando con entrambe le versioni 5.0 e 7.0, nessuna differenza):

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) 

Uso Sybase: DSN:

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

Errore:

could not find driver 

ODBC:
io non sono in grado di connettersi con i driver ODBC. Ho letto la guida qui: http://www.sybase.com/files/White_Papers/PHP_SQL_Anywhere.pdf e ho scaricato il pacchetto .so corretto qui: http://scn.sap.com/docs/DOC-40537 ma non riesco a far riconoscere a PHP il pacchetto, caricarlo e usarlo.

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' 

errore ottengo:

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

Quale driver devo utilizzare per la connessione a Sybase db? Qual è il DSN corretto?

+0

Sono abbastanza sicuro che la porta deve essere incluso, a prescindere da quale DSN si utilizza (Le ultime due voci DSN non includerlo) –

+0

Se specifico la porta (5200) il il problema è sempre lo stesso –

risposta

0

L'errore "Data source name not found and no default driver specified." significa che il DSN o di driver si specifica non può essere trovato nel odbc.ini file di per l'ambiente ODBC.

È necessario assicurarsi che l'ambiente ODBC sia impostato correttamente. In genere, questo include una specifica per la posizione e il nome file del file odbc.ini.

Al momento il tentativo di connessione, il file odbc.ini saranno cercato di trovare un nome corrispondente Data Source (DSN)

Nel tuo caso, si specifica un "Driver". Questa è una configurazione simile solitamente trovata nel file odbcinst.ini; specificato anche dal proprio ambiente ODBC.

Un'altra cosa da verificare è assicurarsi che l'ambiente ODBC sia stato trovato dal processo in esecuzione o che possieda l'utente per l'app PHP.

La chiave è capire quale parte della sequenza di connessione ha esito negativo. Nel tuo caso, una connessione sarebbe seguire questo percorso:

  1. applicazione viene avviata
  2. connessione ODBC viene tentata
  3. ODBC Ambiente è cercato di trovare il file di configurazione (di solito ODBCINST.INI per le configurazioni "driver"
  4. Trova una corrispondenza per il valore specificato per "Driver =" nella stringa di connessione
  5. La connessione viene tentata utilizzando i valori configurati nella sezione Driver trovato insieme ad altre opzioni fornite nella stringa di connessione.

Le due cose principali che causano l'errore che si stanno ottenendo sono queste:

  1. ODBC Ambiente non è configurato
  2. Il DSN o il valore del driver non è stato digitato correttamente.

Spero che questo aiuti.

Tony Hall

Problemi correlati