為了解決Linux系統連接MSSql Server的問題,微軟為Linux系統提供了連接MSSql Server的ODBC官方驅動。通過官方驅動,Linux程序可以方便地對MSSql Server進行訪問。
官網提供了三個版本的驅動,分別用於以下發行版的Linux系統:
64bit Red Hat Enterprise Linux 5
64bit Red Hat Enterprise Linux 6
64bit SUSE Linux Enterprise 11 Service Pack 2
(實測 64bit CentOS 6.4 和 64bit CentOS 7.1 可以安裝使用64bit Red Hat Enterprise Linux 6版本的ODBC驅動)
安裝配置過程可以通過以下步驟完成:
1. 下載安裝包
Red Hat 5/6:https://www.microsoft.com/en-us/download/details.aspx?id=36437
SUSE 11:http://www.microsoft.com/en-us/download/details.aspx?id=34687
2. 安裝unixODBC 2.3.0
# 以red hat 6版本為例 tar xzf msodbcsql-11.0.2270.0.tar.gz cd msodbcsql-11.0.2270.0 ./build_dm.sh
3. 安裝Microsoft ODBC Driver 11 for SQL Server on Linux
./install.sh install
4. 通過命令行連接到數據庫服務器
安裝完驅動后就可以通過驅動自帶的命令行工具測試連接了:
sqlcmd -S 192.168.1.10 -U sa -P sa -d master -Q 'select "Hello World"'
假如連接成功,該命令就會輸出“Hello World”的查詢結果
5. 配置unixODBC數據源
sqlcmd命令除了可以通過指定地址、用戶名密碼連接數據庫外,還可以通過指定數據源名稱連接數據庫。數據源可以通過unixODBC所提供的odbcinst命令進行配置:
1). 建立模版配置文件 template.ini,內容如下
[DataSourceName] Driver = ODBC Driver 11 for SQL Server Server = 192.168.1.10 UID = sa PWD = sa Database = master
2). 導入配置
odbcinst -i -s -l -f template.ini
執行完之后,可以再次通過sqlcmd命令工具來測試連接
sqlcmd -S DataSourceName -Q 'select "Hello World"'
該命令和前面的直接指定IP地址和用戶名密碼的命令得到同樣的結果
6. 通過PHP連接到數據庫服務器
該例子是通過修改CodeIgniter 3.0.0的mssql driver,把所有原mssql_* API 替換成odbc_* API,讓所有數據庫操作都通過ODBC連接進行,同時也復用了原CodeIgniter框架對mssql的支持。項目代碼托管在github上:https://github.com/ratzhou/CodeIgniter。以下是使用修改后的CodeIgniter框架通過ODBC連接MSSql Server的例子:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); /* * file name: application/controllers/Test.php */ class Test extends CI_Controller { public function index() {
$config['dbdriver'] = 'mssql'; $config['dsn'] = 'DataSourceName';
// 這里仍然需要指定數據庫名和用戶名密碼
$config['database'] = 'my_database'; $config['username'] = 'sa'; $config['password'] = 'sa';
$mssql = $this->load->database($config, true); $result = $mssql->get('my_table'); var_dump($result->result_array()); } }