LoginSignup
1
4

More than 5 years have passed since last update.

Microsoft公式ドライバーでUbuntuからSQLServerを見に行く

Last updated at Posted at 2017-04-27

とある方のTLでUbuntuにもMicrosoft公式のSQLServerのドライバーが提供されていることを知りました。
FreeTDSで必死につなぎに行った私が試さないわけにはいかないでしょう。

SQL ServerからVB.Netまで全てMicrosoftで揃えているシステムはデータベース名もテーブル名もカラム名も全て日本語で書いてあります。
変数名や関数名も日本語で書いても動くので何の悪気もありません。

勿論、Linuxから見る場合はもう、棘(いばら)の道決定。orz

では頑張っていきましょう。

環境

Client

  • Ubuntu 16.04.2 LTS (x86_64)
  • PHP7.0

Server

  • Windows Server 2012R2
  • SQL Server 2016 Express

特殊な条件

  • データベース名、テーブル名、カラム名は全て日本語
  • 10万件以上のBigData

設定

phpをcliで実行して確かめるのでapacheは入れません。

PHPをインストール

install_php
$ sudo apt -y install php7.0 mcrypt php7.0-mcrypt php-mbstring php-pear php7.0-dev

msql-toolsをインストール
$ sudo su
$ curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
$ curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
$ exit
$ sudo apt update
$ sudo ACCEPT_EULA=Y apt install mssql-tools
$ sudo apt install unixodbc-dev
$ echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
$ echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
$ source ~/.bashrc
SQL_ServerのVersion確認クエリー
$ sqlcmd -S ServerAddress -U sa -P yourpassword -Q "SELECT @@VERSION"
-----------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64)
        Apr 29 2016 23:23:58
        Copyright (c) Microsoft Corporation
        Express Edition (64-bit) on Windows Server 2012 R2 Datacenter Evaluation 6.3 <X64> (Build 9600: )

(1 rows affected)
phpのドライバーのインストール
sudo apt update
sudo ACCEPT_EULA=Y apt install msodbcsql
sudo apt install unixodbc-dev gcc g++ build-essential
sudo pecl install sqlsrv pdo_sqlsrv
sqlsrv,pdo_sqlsrvの有効化
$ sudo touch /etc/php/7.0/mods-available/sqlsrv.ini
$ sudo echo "extension=sqlsrv.so" > /etc/php/7.0/mods-available/sqlsrv.ini
$ sudo touch /etc/php/7.0/mods-available/pdo_sqlsrv.ini
$ sudo echo "extension=pdo_sqlsrv.so" > /etc/php/7.0/mods-available/pdo_sqlsrv.ini
$ sudo phpenmod -v 7.0 -s cli sqlsrv pdo_sqlsrv

これで設定完了。
今回はSQL Serverに郵便番号のデータをインポートしておきました。
124114件あります。
データベース名もテーブル名もカラム名も日本語で作りました。
これをPHPから見てみましょう。

sqlcmdでSQLServerのデータを見る
~$ sqlcmd -S 192.168.0.3 -U sa -P Password
1> use 日本語システム
2> go
データベース コンテキストが '日本語システム' に変更されました。
1> select top 3 郵便番号,都道府県,市区町村,住所それ以降 from 郵便
2> go
郵便番号 都道府県  市区町村      住所それ以降                                                          
------- -------- ------------- --------------------
0600000 北海道    札幌市中央区   以下に掲載がない場合                                                     
0640941 北海道    札幌市中央区   旭ケ丘                                                                   
0600041 北海道    札幌市中央区   大通東                                                                   

(3 rows affected)

PHPから表示

postalcode.php
<?php
$serverName="192.168.0.3";
$connectionOptions=array(
        "Database"=>"日本語システム",
        "Uid"=>"sa",
        "PWD"=>"Password"
);


//Establishes the connection
$conn = sqlsrv_connect($serverName, $connectionOptions);
//if($conn)
//    echo "Connected!";

$tsql="SELECT 郵便番号,市区町村,住所それ以降 FROM 郵便 WHERE 郵便番号=6040905";

$getProducts = sqlsrv_query($conn, $tsql);

if ($getProducts == FALSE)
    die(FormatErrors(sqlsrv_errors()));

$productCount = 0;

while($row = sqlsrv_fetch_array($getProducts, SQLSRV_FETCH_ASSOC))
{
    print_r($row);
    $productCount++;
}
sqlsrv_free_stmt($getProducts);
sqlsrv_close($conn);

function FormatErrors( $errors )
{
    echo "Error information: ";

    foreach ( $errors as $error )
    {
        echo "SQLSTATE: ".$error['SQLSTATE']."";
        echo "Code: ".$error['code']."";
        echo "Message: ".$error['message']."";
    }
}

?>
実行結果
$ php postalcode.php
Array
(
    [郵便番号] => 6040905
    [市区町村] => 京都市中京区
    [住所それ以降] => 梅之木町新烏丸通竹屋町上る新烏丸通竹屋町下る新烏丸通夷川上る
)
Array
(
    [郵便番号] => 6040905
    [市区町村] => 京都市中京区
    [住所それ以降] => 夷川通新烏丸東入夷川通新椹木町西入竹屋町通新烏丸東入竹屋町通椹木
)
Array
(
    [郵便番号] => 6040905
    [市区町村] => 京都市中京区
    [住所それ以降] => 町西入新烏丸通御霊図子下る
)

よし、使える。

参考サイト

SQL Server - Getting Started PHP-Ubuntu
SQL ServerのUbuntu版をインストールするところから説明している。
今回は1のInstall sqlcmd Command Line Utility for SQL Server と
2 を参考にしている。

Microsoft msphpsql - Github Repo

PHP and SQL Server for Linux
zendのblog、導入のやり方がDebian/Ubuntuの流儀に近い。

Microsoft® ODBC Driver 13 for SQL Server® - Windows + Linux
動作環境等が書かれている。
SQL Server2000 2005は動作対象外

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4