8


I'm trying to connect to a Sybase (SQL Anywhere 12) database using PHP's PDO. I spent hours trying to find the correct driver and DSN to use, with NO success AT ALL. Everytime I try to edit a single parameter I always get errors. I tried tens of different combinations of DSN parameters, nothing happens. I'll report here only a few just to give you example of what I'm trying to obtain.

I successfully installed PDO drivers - from php.ini:

PDO drivers     dblib, mysql, odbc, pgsql 

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

DB params:

The IP for the DB is 192.168.100.234 and both the db instance and db name are GAMMA01. I can't tell you username and password, but let's say: user dba and pwd allright.
I can ping the server from the server where I try to start the connection.

I'm under Linux Debian Squeeze and PHP 5.3.3.

DBLIB:

I'm not able to find the correct DSN to use in order to connect to my Database server.

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');

Error I get

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

FreeTDS error log (trying with both versions 5.0 and 7.0, no difference):

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)

Using sybase: DSN:

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

Error:

could not find driver

ODBC:
I'm not able to connect with ODBC drivers. I read the guide here: http://www.sybase.com/files/White_Papers/PHP_SQL_Anywhere.pdf and downloaded the proper .so package here: http://scn.sap.com/docs/DOC-40537 but I can't make PHP recognize the package, load it and use it.

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'

Error I get:

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

Which driver should I use to connect to Sybase db? Which is the correct DSN?

tobia.zanarella
  • 1,246
  • 1
  • 17
  • 25

1 Answers1

0

The "Data source name not found and no default driver specified." error means that the DSN or Driver you are specifying cannot be found in the odbc.ini file for your ODBC environment.

You need to make sure that your ODBC environment is setup properly. Typically, this includes a specification for the location and file name of the odbc.ini file.

Upon attempting to connect, the odbc.ini file will be searched to find a matching Data Source Name (DSN)

In your case, you are specifying a "Driver". This is a similar configuration usually found in the odbcinst.ini file; also specified by your ODBC environment.

Another thing to check for is to make sure that the ODBC environment is being found by the running process or owning user for your PHP app.

The key is to figure out what part of the connection sequence is failing. In your case, a successful connection would follow this path:

  1. Application is started
  2. ODBC Connection is attempted
  3. ODBC Environment is searched to find the configuration file (usually odbcinst.ini for "Driver" configurations)
  4. Finds a match for the value specified for "Driver=" in connection string
  5. Connection is attempted using the values configured in the found Driver section along with other options provided in connection string.

The two main things that cause the error you are getting are these:

  1. ODBC Environment is not configured
  2. The DSN or Driver value is not spelled correctly.

I hope this helps.

Tony Hall

PRGSTony
  • 947
  • 7
  • 7