Linux環境下經過ODBC訪問MSSql Server

爲了解決Linux系統鏈接MSSql Server的問題,微軟爲Linux系統提供了鏈接MSSql Server的ODBC官方驅動。經過官方驅動,Linux程序能夠方便地對MSSql Server進行訪問。php

官網提供了三個版本的驅動,分別用於如下發行版的Linux系統:git

64bit Red Hat Enterprise Linux 5github

64bit Red Hat Enterprise Linux 6sql

64bit SUSE Linux Enterprise 11 Service Pack 2數據庫

(實測 64bit CentOS 6.4 和 64bit CentOS 7.1 能夠安裝使用64bit Red Hat Enterprise Linux 6版本的ODBC驅動)服務器

安裝配置過程能夠經過如下步驟完成:app

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()); } }
相關文章
相關標籤/搜索