簡體   English   中英

在RHEL上使用PHP的無DSN ODBC連接到SQL Server

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM