副題: Road to SQLServer on Windows. (^^;
【追記 2019年3月12日】
CentOS7 と PHP7系については、こちらにまとめてます。
https://ptsv.jp/repository/rhel7-php71-sqlserver/
備忘録です。
今まで、CentOS6からSQLServerへのアクセスは、FreeTDS を使っていました。PHPからはPDO_DBLIB 経由。これは結構簡単にセットアップできました。yum で FreeTDSとか、もっと簡単に、php-sybaseなりphp-mssqlなり入れれば依存関係で必要なライブラリは勝手にインストールされますしね。設定自体も、/etc/freetds.conf と /etc/locales.conf とかいじればあとは、PDOからアクセスできます。
で、非常に疎かったので知らなかったんですが、Microsoftから Linux向けのSQLServer ODBCドライバが供給されている、とのこと。
今更何言ってんの??? って感じですが、知らなかったものはしょうがない。説明通りにやってみます(^^;
# curl https://packages.microsoft.com/config/rhel/6/prod.repo > /etc/yum.repos.d/mssql-release.repo exit root $ sudo ACCEPT_EULA=Y yum install msodbcsql $ sudo ACCEPT_EULA=Y yum install mssql-tools $ sudo yum install unixODBC-devel $ sudo ln -sfn /opt/mssql-tools/bin/sqlcmd /usr/bin/sqlcmd $ sudo ln -sfn /opt/mssql-tools/bin/bcp /usr/bin/bcp
エラーもなく、インストール完了。
ここまでは説明書通り。
さて、ここから設定。
/etc/odbcinst.ini を開くと、以下のセクションが追加されているはず。
[ODBC Driver 13 for SQL Server] Description=Microsoft ODBC Driver 13 for SQL Server Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.1.so.6.0 UsageCount=1
そして、/etc/odbc.ini を編集します。僕の環境ではodbc.ini は空のファイルでした。
データソースを記述していきます。
[Development] Driver = ODBC Driver 13 for SQL Server #odbcinst.ini に追加されたセクション名 Description = for development databse #適当 Trace = Yes #わからん。 Server = 10.1.1.1 #稼働中のSQLServerのIPアドレスもしくはホスト名 ファイヤーウォールでアクセス許可を出すこと。 Port = 1433 #SQLServer Configuration Manager で TCP/IP を有効に。 Database = Sample #データベース名
この状態で、まず、isql コマンドで接続してみます。書式は、isql [データソース名] [ユーザー名] [パスワード]ですね。
$ isql Development dbuser dbpass +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select count(*) from hogehoge +------------+ | | +------------+ | 5500 | +------------+ SQLRowCount returns 0 1 rows fetched SQL>
無事接続できました!
今度は、マイクロソフトが提供しているツールを使用してみましょう。
$ sqlcmd -S 10.1.1.1 -U dbuser Password: xxxxxx 1> use Sample 2> go データベース コンテキストが 'Sample' に変更されました。 1> select count(*) from hogehoge 2> go ----------- 5500 (1 rows affected) 1>
接続できました。
次に、PHP で PDO_ODBC経由で接続してみます。
DSNには、odbc.ini で設定した、データソース名ではなく、ドライバ名・サーバー名・データベース名をそれぞれ直接指定してみました。
$ php -a Interactive shell php > $pdo = new PDO('odbc:Driver={ODBC Driver 13 for SQL Server};Server=10.1.1.1;Database=Sample','dbuser','dbpass'); php > $sth = $pdo->query('select count(*) from hogehoge'); php > echo $sth->fetchColumn(); 5500 php >
接続できました。
日本語(UTF-8)が正常にCRUDできるか、まだテストしていませんが、とりあえずは、正常に接続できることを確認できたことでヨシとしましょう。