簡體   English   中英

通過 PDO ODBC 將 PHP 連接到 MSSQL

[英]Connect PHP to MSSQL via PDO ODBC

當我執行此代碼時:

print_r(PDO::getAvailableDrivers()); 

它說我有可用的odbc驅動程序。

Array ( [0] => mysql [1] => odbc [2] => sqlite )

但是,當我嘗試像這樣使用它時:

$handle = new PDO("odbc:Server=dbServerIpAddress,myportnumber;Database=mydatabase", "myusername", 'mypassword');

它什么都不做 - 沒有錯誤,它根本不起作用。 它甚至不會越過那條線執行!

如何通過 PDO 和 ODBC 將 PHP 連接到這個 MSSQL 數據庫?

您需要設置幾個配置文件。 /etc/odbc.ini/etc/odbcinst.ini/etc/freetds/freetds.conf (這些位置對 Ubuntu 12.04 有效,並且可能適用於大多數 *nix)。

您需要安裝unixodbcfreetds (不確定 CentOS 上的軟件包名稱是什么)。 在 Ubuntu 中,這將是apt-get install unixodbc tdsodbc

有關安裝這些的幫助,請查看這個問題Can't Install FreeTDS via Yum Package Manager

/etc/odbc.ini(這個文件可能是空的)

# Define a connection to a Microsoft SQL server
# The Description can be whatever we want it to be.
# The Driver value must match what we have defined in /etc/odbcinst.ini
# The Database name must be the name of the database this connection will connect to.
# The ServerName is the name we defined in /etc/freetds/freetds.conf
# The TDS_Version should match what we defined in /etc/freetds/freetds.conf
[mssql]
Description             = MSSQL Server
Driver                  = freetds
Database                = XXXXXX
ServerName              = MSSQL
TDS_Version             = 7.1

/etc/odbcinst.ini

# Define where to find the driver for the Free TDS connections.
# Make sure you use the right driver (32-bit or 64-bit).
[freetds]
Description = MS SQL database access with Free TDS
Driver      = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so
#Driver      = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup       = /usr/lib/i386-linux-gnu/odbc/libtdsS.so
UsageCount  = 1

/etc/freetds/freetds.conf (或者你可以在 /etc/freetds.conf 找到它)

# The basics for defining a DSN (Data Source Name)
# [data_source_name]
#       host = <hostname or IP address>
#       port = <port number to connect to - probably 1433>
#       tds version = <TDS version to use - probably 8.0>

# Define a connection to the Microsoft SQL Server
[mssql]
    host = XXXXXX
    port = 1433
    tds version = 7.1

根據您的 MSSQL 版本,您可能需要更改上面的tds version = 7.1行。

進行這些更改后,您必須重新啟動 apache。

在您的 PHP 代碼中,您將像這樣創建 PDO 對象:

$pdo = new PDO("dblib:host=mssql;dbname=$dbname", "$dbuser","$dbpwd");

請注意,您的用戶名可能需要采用以下格式: domain\\username

此外,如果您在頁面中執行phpinfo()並搜索“freetds”,它將顯示一個 mssql 部分,其中 freetds 被列為庫版本,您就會知道它是否有效。

接受的答案在實際 PHP 調用之前是正確的。 正如有人正確評論的那樣,它應該調用 odbc 驅動程序。 其次,它不使用已在odbc.ini 中配置的數據源名稱 (DSN),但實際上是在創建臨時 DSN。 相反:

$pdo = new PDO("odbc:mssql", "$dbuser","$dbpwd");

其中mssql指的是odbc.ini 中的 DSN 對象

您可以按如下方式創建臨時 DSN:

$pd = new PDO('odbc:DRIVER=FreeTDS;SERVERNAME=mssql;DATABASE=' . $dbName,
              $dbuser, $dbpass);

其中MSSQL現指服務器對象freetds.conffreetds的ODBCINST.INI驅動程序對象

(這真的應該是一個評論,但我沒有代表點)。

如果您想使用 FreeTDS 驅動程序直接設置一個 pdo odbc 連接到 MS SQL 服務器,而無需在配置文件 freetds.conf 中指定它。

$connection_string = "odbc:DRIVER=FreeTDS;SERVER=$serverName;PORT=$portNo;DATABASE=$dbName"; 
$conn = new PDO($connection_string, $dbUser, $dbPass);

如果您的 MSSQL 服務器具有命名實例,則可以刪除端口號,然后以 server_ip\\instance_name 格式修改 $serverName 例如:“192.168.1.1\\sqlexpress”,其中 sqlexpress 是實例名稱。

$connection_string = "odbc:DRIVER=FreeTDS;SERVER=$serverName;DATABASE=$dbName"; 
$conn = new PDO($connection_string, $dbUser, $dbPass);

請注意在odbcinst.ini中配置驅動位置

[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver      = libtdsodbc.so
Setup       = libtdsS.so

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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