CentOS 7.2 上の PHP 7.1 から SQL Server に接続する

こんにちは。

今回は CentOS 7.2 の PHP 7.1 から Microsoft SQL Server 2014 に接続する方法を紹介します。

情報が少ない

そもそも Linux 上の PHP から Windows Server の SQL Server に接続する人が奇特なのか、ネット上でまとまった情報に出会うことができません。

あってもけっこう古かったりして、なんかいろいろ入れないといけない感じを醸し出して(´д`)な顔になっていたんですが、実は簡単にインストールできました。

想定条件

この記事は下記の環境を想定しています。

  • remi リポジトリがインストールされていること
# yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
  • remi-php71 リポジトリから PHP 7.1 がインストールされていること
# yum install -y --enablerepo=remi,remi-php71 php php-devel php-mbstring php-pdo php-gd php-dom

インストール

インストール自体はごくシンプルで、同じく remi-php71 リポジトリ から php-sqlsrv パッケージをインストールしてやるだけです。

# yum install -y --enablerepo=remi,remi-php71 php-sqlsrv
php-sqlsrv.x86_64 0:4.0.4-5.el7.remi.7.1

依存関係のパッケージも一緒にインストールされます。

php-mssql とか FreeTDS とかなんにもいりませんでした。ほとんど mysql とかと変わりませんね!

おまけ: Laravel 5.3 での接続設定

Laravel 5 での接続設定をメモしておきます。

config/database.php

Laravel のデフォルトでは SQL Server 用の接続情報がないので、 .env に sqlsrv を指定しても、

InvalidArgumentException with message ‘Database [sqlsrv] not configured.’

とか言われてしまいます。

config/database.php の 'connections' が定義されているところに sqlsrv を追加します。

'connections' => [
       'sqlsrv' => [
            'driver' => 'sqlsrv',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
        ],

.env

.env ファイルには上で定義した sqlsrv の接続設定を使うように指定します。

DB_CONNECTION=sqlsrv
DB_HOST=ホスト名
DB_DATABASE=データベース名
DB_USERNAME=ユーザー名
DB_PASSWORD=パスワード

動作確認

あとは普通に Model を作成して、 tinker でデータを取得してみればいいでしょう。

$ php artisan make:model モデル名
$ php artisan tinker
Psy Shell v0.7.2 (PHP 7.1.0RC2 — cli) by Justin Hileman
>>> App\モデル名::all()->toArray()
=> []

SNSでもご購読できます。