tob*_*lla 6 sybase odbc pdo sqlanywhere freetds
我正在尝试使用PHP的PDO连接到Sybase(SQL Anywhere 12)数据库.我花了好几个小时试图找到正确的驱动程序和DSN使用,没有成功.每次我尝试编辑单个参数时,我总是会遇到错误.我尝试了几十种不同的DSN参数组合,没有任何反应.我在这里只报告一些只是为了举例说明我想要获得的东西.
我成功安装了PDO驱动程序 - 来自php.ini:
PDO drivers dblib, mysql, odbc, pgsql
PDO Driver for FreeTDS/Sybase DB-lib enabled
Flavour freetds
Run Code Online (Sandbox Code Playgroud)
DB参数:
DB的IP为192.168.100.234,db实例和db名称均为GAMMA01.我不能告诉你用户名和密码,但是让我们说:用户dba和pwd好吧.
我可以从尝试启动连接的服务器ping服务器.
我在Linux Debian Squeeze和PHP 5.3.3下.
DBLIB:
我无法找到正确的DSN来连接到我的数据库服务器.
DSN版本1:
'dblib:host=192.168.100.234;DBN=GAMMA01'
Run Code Online (Sandbox Code Playgroud)
DSN第2版:
'dblib:host=192.168.100.234;DBN=GAMMA01;UID=dba;PWD=allright;Server=GAMMA01;ASTART=No'
Run Code Online (Sandbox Code Playgroud)
DSN第3版:
new PDO('dblib:host=192.168.100.234;dbname=GAMMA01', 'dba', 'allright');
Run Code Online (Sandbox Code Playgroud)
我得到的错误
SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (severity 9)
Run Code Online (Sandbox Code Playgroud)
FreeTDS错误日志(尝试使用版本5.0和7.0,没有区别):
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)
Run Code Online (Sandbox Code Playgroud)
使用sybase: DSN:
'sybase:host=192.168.100.234;dbname=GAMMA01, dba, allright'
Run Code Online (Sandbox Code Playgroud)
错误:
could not find driver
Run Code Online (Sandbox Code Playgroud)
ODBC:
我无法连接ODBC驱动程序.我在这里阅读了指南:http://www.sybase.com/files/White_Papers/PHP_SQL_Anywhere.pdf并在此处下载了正确的.so包:http://scn.sap.com/docs/DOC-40537但我可以让PHP识别包,加载它并使用它.
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'
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
SQLSTATE[IM002] SQLDriverConnect: 0 [unixODBC][Driver Manager]Data source name not found, and no default driver specified
Run Code Online (Sandbox Code Playgroud)
我应该使用哪个驱动程序连接到Sybase db?哪个是正确的DSN?
该错误意味着在ODBC 环境的odbc.ini"Data source name not found and no default driver specified."文件中找不到您指定的 DSN 或驱动程序。
您需要确保 ODBC 环境设置正确。通常,这包括odbc.ini文件的位置和文件名的规范。
尝试连接时,将搜索 odbc.ini 文件以查找匹配的数据源名称 (DSN)
在您的情况下,您指定一个“驱动程序”。这是通常在odbcinst.ini文件中找到的类似配置;也由您的 ODBC 环境指定。
另一件需要检查的事情是确保正在运行的进程或 PHP 应用程序的所有者用户正在找到 ODBC 环境。
关键是要找出连接序列的哪一部分发生了故障。在您的情况下,成功的连接将遵循以下路径:
导致您收到错误的两个主要因素是:
我希望这有帮助。
托尼·霍尔
| 归档时间: |
|
| 查看次数: |
3255 次 |
| 最近记录: |