[英]DSN-less ODBC connections to SQL Server using PHP on RHEL
是否可以使用PHP和RHEL上的無DSN連接連接到Microsoft SQL Server?
/etc/odbcinst.ini
內容
[SQL Server Native Client 11.0]
Description=Microsoft SQL Server ODBC Driver V1.0 for Linux
Driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0
Threading=1
UsageCount=1
PHP代碼
$dsn = "Driver={SQL Server Native Client 11.0};Server=server_ip_here;Database=database_here;User Id=username_here;PWD=password_here";
$con = odbc_connect($dsn,$duser,$dpas) or die(odbc_errormsg() );
錯誤:
Warning: odbc_connect(): SQL error: [unixODBC][Driver Manager]Data source name not found, and no default driver specified, SQL state IM002 in SQLConnect in /path/to/file/index.php on line 152 [unixODBC][Driver Manager]Data source name not found, and no default driver specified
在這里仔細檢查了我的連接字符串: http : //www.connectionstrings.com/sql-server/
PHP的odbc_connect可以接受無DSN的連接字符串: http : //php.net/manual/en/function.odbc-connect.php
連接的數據庫源名稱。 或者,可以使用無DSN的連接字符串。
PHP Info確認已加載ODBC。
ODBC Support enabled
Active Persistent Links 0
Active Links 0
ODBC library unixODBC
ODBC_INCLUDE -I/usr/include
ODBC_LFLAGS -L/usr/lib64
ODBC_LIBS -lodbc
Directive Local Value Master Value
odbc.allow_persistent On On
odbc.check_persistent On On
odbc.default_cursortype Static cursor Static cursor
odbc.default_db no value no value
odbc.default_pw no value no value
odbc.default_user no value no value
odbc.defaultbinmode return as is return as is
odbc.defaultlrl return up to 4096 bytes return up to 4096 bytes
odbc.max_links Unlimited Unlimited
odbc.max_persistent Unlimited Unlimited
當執行strace時,它表明/etc/odbc.ini
和/home/me/odbc.ini
在頁面呈現期間被訪問。 我確實通過CLI啟動了頁面以獲取這些信息:
open("/etc/odbcinst.ini", O_RDONLY) = 3
open("/home/me/.odbcinst.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
不幸的事實是,如果我使用DSN,所有這些都可以使用。 我真的需要少DSN才能工作。
是的,可以使用從PHP到MS SQL Server的DSNless連接。
在連接字符串中將“ Driver”更改為DRIVER。
運行odbcinst -j來檢查系統驅動程序文件的位置,然后確保其中包含驅動程序。
如果我重復您在Perl中所做的事情,我會得到:
perl -MDBI -le 'my $x = DBI->connect("dbi:ODBC:Driver={Easysoft ODBC-SQL Server}");'
DBI connect('Driver={Easysoft ODBC-SQL Server}','',...) failed: [unixODBC][Driver Manager]Data source name not found, and no default driver specified (SQL-IM002) at -e line 1.
perl -MDBI -le 'my $x = DBI->connect("dbi:ODBC:DRIVER={Easysoft ODBC-SQL Server}");'
DBI connect('DRIVER={Easysoft ODBC-SQL Server}','',...) failed: [unixODBC][Easysoft][SQL Server Driver][SQL Server]General error: server name not specified (SQL-HY000) at -e line 1.
請注意,第一個失敗,就像您得到的,第二個找到了驅動程序,但是我沒有指定服務器名,因此它基本上表明您需要DRIVER。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.